题目大意
贝茜去了购物中心的珠宝店,探寻一条魅力手链。 当然,她想用N个(1≤N≤3,402)可用的饰物填充尽可能的最佳饰物。 提供的列表中的每个超级字符i的权重均为Wi(1≤Wi≤400),“合意性”因子Di(1≤Di≤100),最多可以使用一次。 贝西只能支撑重量不超过M(1≤M≤12,880)的手链。
思路分析
背包问题,一个背包问题以及各种优化写法的详细总结,简单背包,不过为了好看为了好写 直接用内存优化的形式
#include<iostream>
#include<string.h>
#include<algorithm>
#include<vector>
using namespace std;
int dp[13000];
pair<int, int> v[3500];
int main() {
int n, m, a, b; cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a >> b;
v[i] = make_pair(a, b);
}
for (int i = 1; i <= n; i++) {
for (int j = m; j >= v[i].first; j--) {
dp[j] = max(dp[j], dp[j - v[i].first] + v[i].second);
}
}
cout << dp[m] << endl;
}