Charm Bracelet
题目链接: POJ - 3624二维:
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int dp[400][13000], w[4000], d[4000];
int main(){
int n, m;
cin >> n >> m;
for(int i=1; i<=n; i++){
cin >> w[i] >> d[i];
}
memset(dp, 0, sizeof(dp));
int ans=0;
for(int i=1; i<=n; i++){
for(int j=m; j>=0; j--){
if(j<w[i]) dp[i][j]=dp[i-1][j];
else dp[i][j]=max(dp[i-1][j], dp[i-1][j-w[i]]+d[i]);
ans=max(ans, dp[i][j]);
}
}
cout << ans << endl;
return 0;
}
一维:
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int dp[13000], w[4000], d[4000];
int main(){
int n, m;
cin >> n >> m;
for(int i=1; i<=n; i++){
cin >> w[i] >> d[i];
}
memset(dp, 0, sizeof(dp));
for(int i=1; i<=n; i++){
for(int j=m; j>=w[i]; j--){
dp[j]=max(dp[j], dp[j-w[i]]+d[i]);
}
}
cout << dp[m] << endl;
return 0;
}