对于不空间优化的01背包
循环时 t放外层,m放内层 或 m放外层,t放内层 都可以吗
比如:
#include<bits/stdc++.h>
using namespace std;
int ti,m;
int t[105],v[105];
int dp[1005][105];
int main(){
cin>>ti>>m;
for(int i=1;i<=m;i++){
cin>>t[i]>>v[i];
}
for(int i=0;i<=ti;i++){
for(int j=1;j<=m;j++){
if(i<t[j]){
dp[i][j]=dp[i][j-1];continue;
}
dp[i][j]=max(dp[i][j-1],dp[i-t[j]][j-1]+v[j]);
}
}
cout<<dp[ti][m];
}
和
#include<bits/stdc++.h>
using namespace std;
int ti,m;
int t[105],v[105];
int dp[1005][105];
int main(){
cin>>ti>>m;
for(int i=1;i<=m;i++){
cin>>t[i]>>v[i];
}
for(int j=1;j<=m;j++){
for(int i=0;i<=ti;i++){
if(i<t[j]){
dp[i][j]=dp[i][j-1];continue;
}
dp[i][j]=max(dp[i][j-1],dp[i-t[j]][j-1]+v[j]);
}
}
cout<<dp[ti][m];
}
均能AC