完全背包问题

来源:互联网 发布:java将gbk转换成utf8 编辑:程序博客网 时间:2024/06/06 05:51

有n种重量和价值分别为wi和vi的物品。从这些物品中挑选总重量不超过W的物品,求出挑选物品价值总和的最大值。在这里,每种物品可以挑选任意多件。

输入:

3 7

3 4

4 5

2 3

输出:

10

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n, W, w[1000], v[1000];int dp[1000][1000];void solve(){    for (int i = 0; i < n; i++){        for (int j = 0; j <= W; j++){            if (j < w[i]){                dp[i + 1][j] = dp[i][j];            }            else{                dp[i + 1][j] = max(dp[i][j], dp[i + 1][j - w[i]] + v[i]);            }        }    }    printf("%d\n", dp[n][W]);}int main(){    while (scanf("%d%d", &n, &W) != EOF){        for (int i = 0; i < n; i++)            scanf("%d%d", &w[i], &v[i]);        solve();    }    return 0;}


0 0
原创粉丝点击