(DP)51NOD 1085 背包问题

在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数)。求背包能够容纳的最大价值。
Input
第1行,2个整数,N和W中间用空格隔开。N为物品的数量,W为背包的容量。(1 <= N <= 100,1 <= W <= 10000)
第2 - N + 1行,每行2个整数,Wi和Pi,分别是物品的体积和物品的价值。(1 <= Wi, Pi <= 10000)
Output
输出可以容纳的最大价值。
Input示例
3 6
2 5
3 8
4 9
Output示例
14
解:
 1 #include <stdio.h>
 2 
 3 #define MAX(a,b) (a > b ? a : b)
 4 #define CLR(x) memset(x,0,sizeof x)
 5 
 6 int dp[10005];
 7 
 8 int main()
 9 {
10     int n, w;
11     while (scanf_s("%d%d", &n, &w) != EOF)
12     {
13         CLR(dp);
14         for (int i = 0; i < n; i++)
15         {
16             int wi, pi;
17             scanf_s("%d%d", &wi, &pi);
18             for (int j = w; j >= wi; j--) dp[j] = MAX(dp[j], dp[j - wi] + pi);
19         }
20         printf("%d\n", dp[w]);
21     }
22 }

猜你喜欢

转载自www.cnblogs.com/Ekalos-blog/p/9689036.html