做的poj3624.代码如下
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=3500,MAXV=13000;
int dp[MAXV],bound[MAXN],s[MAXN][2];
int main(){
int n,v,all;
while(~scanf("%d %d",&n,&v)){
memset(dp,0,MAXV*4);
all=0;
for(int i=1;i<=n;i++)
scanf("%d %d",&s[i][0],&s[i][1]);
for(int i=n;i>=1;i--){//优化1,每次遍历时的下界为<span style="font-family: Arial, Helvetica, sans-serif;">max(v-all,s[i][0]),这里我看的背包九讲的版本好像搞错了,写的是从j,对于第j个背包,应该是从j+1开始加。</span>
bound[i]=max(v-all,s[i][0]);
all+=s[i][0];
}
for(int i=1;i<=n;i++){
for(int j=v;j>=bound[i];j--)
dp[j]=max(dp[j],dp[j-s[i][0]]+s[i][1]);//优化2,滚动数组
}
printf("%d\n",dp[v]);
}
return 0;
}
背包九讲写的确实好,写的即严谨又详细易懂,可见作者功力之高,慢慢学习剩下的吧