文章
3
粉丝
6
获赞
18
访问
632
#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...
登录后发布评论
暂无评论,来抢沙发