OJ最大贡献问题
题目:Description
蒙多最近运气太好了- -,对面怒送一血,抢大龙,小龙,然后各种五杀(蒙多都能五杀,运气不能更好),瞬间超神,小小的钱袋里一下子有好多钱,好开心~,但是他在纠结该买些什么装备才能对团队贡献大,所以他跑来请教你。as we know ,在游戏里我们最多同时拥有6件装备,所以蒙多不能购买超过6件装备。现在有N种不同的装备供蒙多选择,蒙多手上有M单位的钱,每种装备最多只能买一个,每件装备有不同的价格Ai,对团队的贡献度为Bi,请帮助蒙多购买装备使得他对团队贡献值总和最大。
Input
输入包括多组数据,以文件(EOF)结束。
第一行两个整数N(1<=N<=100),M(1<=M<=1000)。
接下来N行,每行两个整数Ai(1<=Ai<=100),Bi(1<=Bi<=1000)。
Output
每组数据一个整数,表示最大贡献度。
Sample Input
Original Transformed
1 5
6 2
3 5
3 3
5 4
4 1
1[SP]5[EOL] 6[SP]2[EOL] 3[SP]5[EOL] 3[SP]3[EOL] 5[SP]4[EOL] 4[SP]1[EOL] [EOL] [EOF]
Sample Output
Original Transformed
0
4
我的代码是:
程序代码:
#include<stdio.h> int main() { int num, mon, choice[100][2]; while (scanf("%d", &num) == 1 && num != EOF) { int sum = 0; char ch = getchar(); scanf("%d", &mon); ch = getchar(); for (int i = 0;i < num;i++) scanf("%d%d", &choice[i][0], &choice[i][1]); for (int i = 0,t,p;i < num-1;i++) { for (int j = 0;j < num-1-i;j++) { if (choice[j][0]>choice[j+1][0]) { t = choice[j][0]; p = choice[j][1]; choice[j][1] = choice[j+1][1]; choice[j][0]=choice[j+1][0]; choice[j+1][0] = t; choice[j+1][1] = p; } } } for (int i,all,max,j=0,k;j < num;j++) { all = max=k=0; i = j; while (i<num&&k<6) { all += choice[i][0]; if (all > mon)break; max += choice[i][1]; k++; i++; } if (sum < max)sum = max; } printf("%d\n", sum); } return 0; }
是错误答案,为什么?结果都是对的,我做过其他数据测试,也没有问题