社区讨论

关于数据范围的求助

AT_dp_x Tower参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m2t42sfs
此快照首次捕获于
2024/10/28 22:25
去年
此快照最后确认于
2025/11/04 15:46
4 个月前
查看原帖
AT_dp_x Tower
C


struct Node{
	int w,s,v;
}t[N];

bool cmp(Node a,Node b){
	return a.w+a.s>b.w+b.s;
}

int f[N];//(考虑了前i个)上面的重量和上限为j时的最大价值

signed main(){
	int n=rd;
	for(int i=1;i<=n;i++){
		t[i]={rd,rd,rd};
	}
	
	
	sort(t+1,t+n+1,cmp);
	
	// memset(f,-0x3f3f,sizeof f);
	f[0]=0;
	for(int i=1;i<=n;i++){
		// cdbg(t[i].s);
		for(int j=t[i].w;j<=M;j++){
			// if(i==2&&min(t[i].s,j-t[i].w)==2)cdbg("OK");
			f[min(t[i].s,j-t[i].w)]=max(f[min(t[i].s,j-t[i].w)],f[j]+t[i].v);
		}
		// cdbg(f[2]);
	}
	int ans=0;
	for(int i=0;i<=M;i++)ans=max(ans,f[i]);
	cout<<ans<<endl;
}

其中M=10000,会WA #6,但是开20000就过了。结合题中s,w<10001,有些不理解。
f[j] 表示(考虑了前i个物品时)且要求后面加上的那个物品的w的上限为i时的最大价值。

回复

1 条回复,欢迎继续交流。

正在加载回复...