01背包

输入

每一个測试点(输入文件)有且仅有一组測试数据。

每组測试数据的第一行为两个正整数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 ", dp[M]); return 0; }



原文地址:https://www.cnblogs.com/tlnshuju/p/6888915.html