Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
谁能帮我找错?题目里的数据能过,可总是WA,提交很多次了 #define max(a,b) a > b ? a : b #include <cstdio> #include <cstdlib> #include <memory.h> int f[100002]; int cash, kinds; int cost[12], weight[12], num[12]; int maxk(int n) { int k = 1; int count = 0; while(k < n) { k *= 2; ++count; } return count ; } int main() { int i,j,k; int amount; while(scanf("%d", &cash) != EOF) { memset(f,0,sizeof(f)); scanf("%d", &kinds); for(i = 1; i <= kinds; ++i) scanf("%d%d", num + i, cost + i); for(i = 1; i <= kinds; ++i) { if(num[i] * cost[i] >= cash) { for(j = cost[i]; j <= cash; ++j) f[j] = max(f[j], f[j - cost[i]] + cost[i]); } else { k = 1; amount = num[i]; while(k < maxk(num[i])) { for(j = cash; j >= k * cost[i]; --j) f[j] = max(f[j], f[j - k * cost[i]] + k * cost[i]); amount -= k; k *= 2; } for(j = cash; j >= amount * cost[i]; --j) f[j] = max(f[j], f[j - amount * cost[i]] + amount * cost[i]); } } printf("%d\n",f[cash]); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator