文章

3

粉丝

6

获赞

18

访问

632

头像
简单的背包问题 题解:
P5129
发布于2025年3月23日 15:04
阅读数 117

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
const int N = 1010;
int a[N];
int dp[N][N];
//状态:背包的容量   可选择的物品,物品重量为wt,价值为v
//选择:当前物品装进背包/不装进背包
//dp[i][w]: 有i个物品,背包容量为w时,可装入的最大价值
//转移方程:dp[i][w] = max(装第i个,不装第i个)
//装第i个:dp[i][w] = dp[i-1][w-a[i-1].wt] + a[i-1].v;
//不装第i个:dp[i][w] = dp[i-1][w]
int main() {
    int s;//背包容量
    int n;//物品件数
    cin >> s;
    cin >> n;
    for (int i = 1;i <= n;i++) {
        cin >> a[i];//物品重量
    }
    for (int i = 0;i <= n;i++) {
        dp[i][0] = 0;
    }
    for (int w = 0;w <= s;w++) {
        dp[0][w] = 0;
    }
    for (int i = 1;i <= n;i++) {
        for (int w = 1;w <= s;w++) {
            if (w - a[i] < 0) {//装不下第i个
                dp[i][w] = dp[i - 1][w];
            }
            else {
                dp[i][w] = max(dp[i - 1][w - a[i]] + a[i], dp[i - 1][w]);
            }
        }
    }
    i...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发