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 |
为什么这样理解就不对呢(测试数据都无恙的过了)如果理解成 价值就是重量,转换成背包问题是ok的。 不过我按照“可达性”来理解做题,为什么就不对呢,代码很简单,请好心人帮看一下. #include <stdio.h> #include <memory.h> #define MAX_CASH 100001 struct Cash { int amount; int demo; }; int dp[MAX_CASH]; int used[MAX_CASH]; Cash allCash[11]; int nCash; int nDeliver; int maxCash() { if(nCash == 0 || nDeliver == 0) return 0; int i,j,k; memset(dp, 0, sizeof(dp)); dp[0] = 1; for( i = 1; i <= nCash; i++) { memset(used, 0, sizeof(used)); for( j = allCash[i].demo ; j <= nDeliver; j++) { if(dp[j - allCash[i].demo] && used[j - allCash[i].demo] < allCash[i].amount) { dp[j] = 1; used[j] = used[j-allCash[i].demo] + 1; } } } for( i = nDeliver; i >= 0; i--) { if(dp[i]) { return i; } } return 0; } int main() { while(scanf("%d", &nDeliver) != EOF) { scanf("%d", &nCash); for( int i = 1; i <= nCash; i++) { scanf("%d%d", &allCash[i].amount, &allCash[i].demo); } printf("%d\n", maxCash()); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator