鲸诗猴刃
查看原帖
鲸诗猴刃
750670
mini_plus楼主2025/7/28 11:30

这个完全背包不优化过不了(像我下面给出的代码)

//40pts
#include<bits/stdc++.h>
using namespace std; 
int m,n;
int w[210],c[40];
int f[10086][12339]={};
int main(){
	cin>>m>>n;
	for(int i=1;i<=n;i++){
		cin>>w[i]>>c[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=0;j<=m;j++){
			for(int z=0;z*w[i]<=j;z++){
                 f[i][j]=max(f[i][j],f[i-1][j-z*w[i]]+z*c[i]);   
            }
		}
	}
	cout<<f[n][m]<<endl;
	return 0;
}

//60pts
#include<bits/stdc++.h>
using namespace std; 
int m,n;
int w[210],c[40];
int f[10086][12339]={};
int main(){
	cin>>m>>n;
	for(int i=1;i<=n;i++){
		cin>>w[i]>>c[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=0;j<=m;j++){
            f[i][j]=f[i-1][j];
            if(j>=w[i]){
                 f[i][j]=max(f[i][j],f[i][j-w[i]]+c[i]);   
            }  
		}
	}
	cout<<f[n][m]<<endl;
	return 0;
}

记得优化一下,你看我提交记录就知道了

2025/7/28 11:30
加载中...