一道01背包的裸题
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5+10;
int w[MAXN], v[MAXN];
int dp[MAXN];
int main(int argc, char const *argv[])
{
int n, m;
cin >> m >> n;
for(int i = 1; i <= n; i++) {
cin >> w[i] >> v[i];
}
for(int i = 1; i <= n; i++) {
for(int j = m; j >= w[i]; j--) {
dp[j] = max(dp[j], dp[j-w[i]]+v[i]);
}
}
cout << dp[m] << endl;
return 0;
}
一道完全背包的裸题
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5+10;
int w[MAXN], v[MAXN];
int dp[MAXN];
int main(int argc, char const *argv[])
{
int n, m;
cin >> m >> n;
for(int i = 1; i <= n; i++) {
cin >> w[i] >> v[i];
}
for(int i = 1; i <= n; i++) {
for(int j = w[i]; j <= m; j++) {
dp[j] = max(dp[j], dp[j-w[i]]+v[i]);
}
}
cout << dp[m] << endl;
return 0;
}