题目链接:http://poj.org/problem?id=3624
题解:动态规划,空间优化
#include <stdio.h>
#include <iostream>
using namespace std;
int w[3505],d[3505],f[13005];//重量,价值和最后计算结果
//在这里计算结果只能用一行表示,不然会超空间
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>w[i]>>d[i];
}
for(int i=1;i<=m;i++){
if(w[0]<=i){
f[i]=d[0];
}else{
f[i]=0;
}
}
for(int i=1;i<n;i++){
for(int j=m;j>=w[i];j--){//从m遍历递减到w[i]
f[j]=max(f[j],f[j-w[i]]+d[i]);
}
}
int tmp=0;
for(int i=1;i<=m;i++){
tmp=max(tmp,f[i]);
}
cout<<tmp<<endl;
return 0;
}