for(int i=1;i<=n;i++){
for(int j=m;j>=x[i];j--){
dp[j][0]=max(dp[j][0],dp[j-x[i]][0]+a[i]);
ans=max(ans,dp[j][0]);
}
}
for(int p=1;p<=n;p++){
for(int i=m;i>=x[p];i--){
for(int j=min(p,k);j>0;j--){
dp[i][j]=max(dp[i][j],max(dp[i-x[p]][j]+a[p],dp[i-x[p]][j-1]+a[p]*2));
ans=max(dp[i][j],ans);
}
}
}
printf("%d",ans);
for(int p=1;p<=n;p++){
for(int i=m;i>=x[p];i--){
for(int j=min(p,k);j>0;j--){
dp[i][j]=max(dp[i][j],max(dp[i-x[p]][j]+a[p],dp[i-x[p]][j-1]+a[p]*2));
ans=max(dp[i][j],ans);
}
dp[i][0]=max(dp[i][0],dp[i-x[p]][0]+a[p]),ans=max(ans,dp[i][0]);
}
}
请问:这样两段代码的区别是什么呀