用贪心写的,时间效率比较低,用的空间也比较多,第一遍先这样过去了。可以用最大堆实现,应该会快。wa了几次,看到大神的测试用例才过得。
3 1 0 76 50 0 30 7 20 13 ans: 60, 0, 0 Number of fish expected: 0 |
#include <cstdio>
#include <string.h>
using namespace std;
int n, h, f[30], d[30], t[30];
int r1[30], r2[30], c[30];
int find_most(int m, int* c){
int most = 0;
for(int i=1;i<m;i++){
if(c[most] < c[i])
most = i;
}
return most;
}
int main(){
bool flag = 0;
while(~scanf("%d", &n)&&n){
int ma = -1;
scanf("%d", &h);
for(int i=0;i<n;i++) scanf("%d", &f[i]);
for(int i=0;i<n;i++) scanf("%d", &d[i]);
for(int i=1;i<n;i++) scanf("%d", &t[i]);
for(int X=1;X<=n;X++){
memset(r1, 0, sizeof(r1));
int tma = 0;
int hi = h*12;
memcpy(c, f, sizeof(int)*n);
for(int j=1;j<X;j++)
hi -= t[j];
while(hi > 0){
int index = find_most(X, c);
r1[index]++;
if(c[index]){
tma += c[index];
c[index] = c[index]-d[index]>0?c[index]-d[index]:0;
}
hi--;
}
if(tma>ma){
ma = tma;
memcpy(r2, r1, sizeof(int)*n);
}
}
if(flag)
printf("\n\n");
flag = 1;
printf("%d", r2[0]*5);
for(int i=1;i<n;i++)
printf(", %d", r2[i]*5);
printf("\n");
printf("Number of fish expected: %d", ma);
}
return 0;
}
本文介绍了一个使用贪心算法解决特定问题的实例,虽然该解决方案在时间和空间效率上表现不佳,但通过采用最大堆等数据结构可以得到优化。文章中包含了完整的代码实现及调试过程。

3379

被折叠的 条评论
为什么被折叠?



