(DP)51NOD 1085 背包问题
Posted ekalos-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(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 ", dp[w]); 21 } 22 }
以上是关于(DP)51NOD 1085 背包问题的主要内容,如果未能解决你的问题,请参考以下文章