背包问题题解
2024-08-18 14:00:48
发布于:广东
0阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010;
int t, m;
int dp[2][maxn];
int v[maxn], w[maxn];
int now = 0, last = 1;
void solve(){
for(int i = 1; i <= m; i++){
now ^= 1;
last ^= 1;
for(int j = 1; j <= t; j++){
if(j >= v[i]){
dp[now][j] = max(dp[last][j], dp[last][j - v[i]] + w[i]);
}else{
dp[now][j] = dp[last][j];
}
}
}
}
int main(){
cin >> t >> m;
for(int i = 1; i <= m; i++){
cin >> v[i] >> w[i];
}
solve();
cout << dp[now][t];
return 0;
}
这里空空如也
有帮助,赞一个