为什么我这个滚动数组写法输出结果是错的(不考虑时间复杂度)
查看原帖
为什么我这个滚动数组写法输出结果是错的(不考虑时间复杂度)
490978
小超手123楼主2022/5/2 20:45
#include<bits/stdc++.h>
using namespace std;
int m,n,ans;
int w[30005],c[30005];
int last[30005]; //上一个f[i]
int f[30005]; //f[i]表示在背包容量有i时的最大价值 
int main(){ 
    cin>>m>>n;
    for(int i=1;i<=n;i++){
    	cin>>w[i]>>c[i];
    	c[i]=c[i]*w[i];
	}
    for(int i=1;i<=n;i++){
    	for(int j=0;j<=m;j++){
    		if(j>=w[i])f[j]=max(last[j],last[j-w[i]]+c[i]);
    		else f[j]=last[j];
    		for(int k=0;k<=m;k++)
			    last[k]=f[k];
		}
	}
	for(int i=1;i<=m;i++)ans=max(ans,f[i]);
	cout<<ans;
	return 0; 
}
2022/5/2 20:45
加载中...