01背包
2017-05-22 12:35 tlnshuju 阅读(133) 评论(0) 编辑 收藏 举报输入
每一个測试点(输入文件)有且仅有一组測试数据。
每组測试数据的第一行为两个正整数N和M,表示奖品的个数,以及小Ho手中的奖券数。
接下来的n行描写叙述每一行描写叙述一个奖品。当中第i行为两个整数need(i)和value(i),意义如前文所述。
測试数据保证
对于100%的数据,N的值不超过500,M的值不超过10^5
对于100%的数据,need(i)不超过2*10^5, value(i)不超过10^3
输出
对于每组測试数据,输出一个整数Ans,表示小Ho能够获得的总喜好值。
5 1000 144 990 487 436 210 673 567 58 1056 897
2099
#include <stdio.h> #define maxn 100005 int dp[maxn]; int max(int a, int b) { return a > b ?a : b; } int main() { int N, M, i, w, v, j; scanf("%d%d", &N, &M); for(i = 0; i < N; ++i) { scanf("%d%d", &w, &v); for(j = M; j >= w; --j) dp[j] = max(dp[j], dp[j-w] + v); } printf("%d\n", dp[M]); return 0; }