- 马上就要校赛了,也不能太水了吧,把学过的再自己打一边
- 这次一个字的书也不看 - -!
A - Charm Bracelet POJ - 3624
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
int n,W;
int dp[3500][3500];
int w[3500];
int v[3500];
void solve(){
memset(dp,0,sizeof(dp));
for(int i = n-1;i >= 0;i--){
for(int j = 0;j <= W;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]]+v[i]);
}
}
}
return;
}
int main(){
scanf("%d %d",&n,&W);
for(int i = 0;i < n;i++){
scanf("%d %d",&w[i],&v[i]);
}
solve();
cout<<dp[0][W]<<endl;;
return 0;
}
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int n,W;
int dp[3500][3500];
int w[3500];
int v[3500];
void solve(){
memset(dp,0,sizeof(dp));
for(int i = 0;i < n;i++){
for(int j = 0;j <= W;j++){
if(j < w[i]) dp[i+1][j] = dp[i][j];
else dp[i+1][j] = max(dp[i][j],dp[i][j-w[i]]+v[i]);
}
}
return;
}
int main(){
cin>>n>>W;
for(int i = 0;i < n;i++){
scanf("%d %d",&w[i],&v[i]);
}
solve();
cout<<dp[n][W]<<endl;;
return 0;
}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
int n,W;
int dp[3500][3500];
int w[3500];
int v[3500];
void solve(){
memset(dp,0,sizeof(dp));
for(int i = 0;i < n;i++){
for(int j = 0;j <= W;j++){
dp[i+1][j] = max(dp[i+1][j],dp[i][j]);
if(j + w[i] <= W) dp[i+1][j+w[i]] = max(dp[i+1][j+w[i]],dp[i][j]+v[i]);
}
}
return;
}
int main(){
cin>>n>>W;
for(int i = 0;i < n;i++){
scanf("%d %d",&w[i],&v[i]);
}
solve();
cout<<dp[n][W];
return 0;
}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
int n,W;
int dp[3500];
int w[3500];
int v[3500];
void solve(){
memset(dp,0,sizeof(dp));
for(int i = 0;i < n;i++){
for(int j = W;j >= w[i];j--){
dp[j] = max(dp[j],dp[j - w[i]] + v[i]);
}
}
return;
}
int main(){
scanf("%d %d",&n,&W);
for(int i = 0;i < n;i++){
scanf("%d %d",&w[i],&v[i]);
}
solve();
cout<<dp[W]<<endl;;
return 0;
}