2023年8月1日发(作者:)

01背包问题(动态规划)+⼀维数组的优化01背包问题(动态规划)+⼀维数组的优化题⽬描述:有 N 件物品和⼀个容量是 V 的背包。每件物品只能使⽤⼀次。第 i 件物品的体积是 v[i]价,值是 w[i]。求解将哪些物品装⼊背包,可使这些物品的总体积不超过背包容量,且总价值最⼤。输出最⼤价值。输⼊格式:第⼀⾏两个整数,N,V,⽤空格隔开,分别表⽰物品数量和背包容积。接下来有 N ⾏,每⾏两个整数 vi,wi,⽤空格隔开,分别表⽰第 i 件物品的体积和价值。4 51 22 43 44 5输出格式输出⼀个整数,表⽰最⼤价值。8数据范围 0using namespace std;int dp[1010][1010];int v[1010],w[1010];//体积和价值int main(){ int n,V; int i,j; cin>>n>>V;//商品个数和背包容量 for(i=1;i<=n;i++){ cin>>v[i]>>w[i];//体积和价值 } for(i=1;i<=n;i++){//依次遍历从第1个物品到底n个物品 for(j=1;j<=V;j++){//依次遍历从0~背包容量v if(jusing namespace std;const int N=1010;int dp[N];int v[N],w[N];//体积和价值int main(){ int n,V;//商品个数和体积 int i,j; cin>>n>>V;//商品个数和背包容量 for(i=1;i<=n;i++){ cin>>v[i]>>w[i];//体积和价值 } int num=0;//计数器 cout<<"逆序遍历输出"<1;j--){ if(j>=v[i]) dp[j]=max(dp[j],dp[j-v[i]]+w[i]); printf("前%2d个物品背包容量为%2d的最优解:",i,j); cout<=v[i]) dp[j]=max(dp[j],dp[j-v[i]]+w[i]); printf("前%2d个物品背包容量为%2d的最优解:",i,j); cout<using namespace std;const int N=1010;int dp[N];int v[N],w[N];//体积和价值int main(){ int n,V;//商品个数和体积 int i,j; cin>>n>>V;//商品个数和背包容量 for(i=1;i<=n;i++){ cin>>v[i]>>w[i];//体积和价值 } for(i=1;i<=n;i++){//依次遍历从第1个物品到底n个物品 for(j=V;j>=v[i];j--){ dp[j]=max(dp[j],dp[j-v[i]]+w[i]); } } cout<

2023年8月1日发(作者:)

01背包问题(动态规划)+⼀维数组的优化01背包问题(动态规划)+⼀维数组的优化题⽬描述:有 N 件物品和⼀个容量是 V 的背包。每件物品只能使⽤⼀次。第 i 件物品的体积是 v[i]价,值是 w[i]。求解将哪些物品装⼊背包,可使这些物品的总体积不超过背包容量,且总价值最⼤。输出最⼤价值。输⼊格式:第⼀⾏两个整数,N,V,⽤空格隔开,分别表⽰物品数量和背包容积。接下来有 N ⾏,每⾏两个整数 vi,wi,⽤空格隔开,分别表⽰第 i 件物品的体积和价值。4 51 22 43 44 5输出格式输出⼀个整数,表⽰最⼤价值。8数据范围 0using namespace std;int dp[1010][1010];int v[1010],w[1010];//体积和价值int main(){ int n,V; int i,j; cin>>n>>V;//商品个数和背包容量 for(i=1;i<=n;i++){ cin>>v[i]>>w[i];//体积和价值 } for(i=1;i<=n;i++){//依次遍历从第1个物品到底n个物品 for(j=1;j<=V;j++){//依次遍历从0~背包容量v if(jusing namespace std;const int N=1010;int dp[N];int v[N],w[N];//体积和价值int main(){ int n,V;//商品个数和体积 int i,j; cin>>n>>V;//商品个数和背包容量 for(i=1;i<=n;i++){ cin>>v[i]>>w[i];//体积和价值 } int num=0;//计数器 cout<<"逆序遍历输出"<1;j--){ if(j>=v[i]) dp[j]=max(dp[j],dp[j-v[i]]+w[i]); printf("前%2d个物品背包容量为%2d的最优解:",i,j); cout<=v[i]) dp[j]=max(dp[j],dp[j-v[i]]+w[i]); printf("前%2d个物品背包容量为%2d的最优解:",i,j); cout<using namespace std;const int N=1010;int dp[N];int v[N],w[N];//体积和价值int main(){ int n,V;//商品个数和体积 int i,j; cin>>n>>V;//商品个数和背包容量 for(i=1;i<=n;i++){ cin>>v[i]>>w[i];//体积和价值 } for(i=1;i<=n;i++){//依次遍历从第1个物品到底n个物品 for(j=V;j>=v[i];j--){ dp[j]=max(dp[j],dp[j-v[i]]+w[i]); } } cout<