求大佬指点:为啥不能初始化?
查看原帖
求大佬指点:为啥不能初始化?
141393
Dyd本人楼主2021/2/27 14:44
#include<bits/stdc++.h>
using namespace std;
const int N=1000000+5;
int n,V,cnt=0;
int c[N],w[N];		//w为价值,c为体积 
int d[N];
int main(){
	cin>>n>>V;
	int a,b,m;
	for(int i=1;i<=n;++i){
		cin>>a>>b>>m;
		for(int k=1;k<=m;k<<=1){		//二进制拆分
			w[++cnt]=a*k;
			c[cnt]=b*k;
			m-=k;
		}
		if(m){
			w[++cnt]=a*m;
			c[cnt]=b*m;
		}
	}
//	memset(d,0xcf,sizeof d);		//没有初始化
	d[0]=0;
	for(int i=1;i<=cnt;++i){
		for(int j=V;j>=c[i];--j){
			d[j]=max(d[j],d[j-c[i]]+w[i]);
		}
	}
	cout<<d[V];
	return 0;
} 

上面这个代码能AC

#include<bits/stdc++.h>
using namespace std;
const int N=1000000+5;
int n,V,cnt=0;
int c[N],w[N];		//w为价值,c为体积 
int d[N];
int main(){
	cin>>n>>V;
	int a,b,m;
	for(int i=1;i<=n;++i){
		cin>>a>>b>>m;
		for(int k=1;k<=m;k<<=1){
			w[++cnt]=a*k;
			c[cnt]=b*k;
			m-=k;
		}
		if(m){
			w[++cnt]=a*m;
			c[cnt]=b*m;
		}
	}
	memset(d,0xcf,sizeof d);	//我也尝试改为memset(d,-0x3f,sizeof d),一样错
	d[0]=0;
	for(int i=1;i<=cnt;++i){
		for(int j=V;j>=c[i];--j){
			d[j]=max(d[j],d[j-c[i]]+w[i]);
		}
	}
	cout<<d[V];
	return 0;
} 

会WA第1个和最后一个点

下了第一个点的数据,我的(有初始化的那个)代码跑出来604,而答案是607

求大佬解惑!

2021/2/27 14:44
加载中...