时间限制:2.0s 内存限制:16.0MB Special Judge 代码提交间隔:5分钟(现在可以提交)
问题描述
有 件物品,第 件物品的重量为 (整数)。
对于给定的整数 , 请选择一些物品,使得拼出的重量不超过 ,请问在此前提下能拼出的最大重量是多少?
输入格式
输入的第一行包含一个整数 ,表示物品数量。
第二行包含 个整数 , , , ,分别为每个物品的重量。
最后一行包含一个整数 。
输出格式
输出的第一行包含一个整数 ,表示答案。
样例输入
3
4 4 6
12
Data
样例输出
10
这道背包问题我一开始打算用回溯做,但会超时和错误,现在打算还是老老实实用背包做,请各方神圣帮本蒟蒻看看吧!
急!在线蹲答案!
#include <iostream>
using namespace std;
int main() {
int n, w, m;
cin >> n >> w >> m;
int dp[n+1][m+1];
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= m; j++) {
dp[i][j] = 0;
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (j >= w) {
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w] + w);
} else {
dp[i][j] = dp[i-1][j];
}
}
}
cout << dp[n][m] << endl;
return 0;
}