求助如何用二维数组的背包通过此题
查看原帖
求助如何用二维数组的背包通过此题
592895
y_kx_b楼主2022/8/18 09:18

写了一个背包:

int d[N];
int dp[N][M]; 
int major(int T){
	mem0(dp);
	n=e[T];
	int sum=0;
	for(int i=1;i<=n;i++)
		sum+=d[i]=read();
	int mid=(sum+1)>>1;
	for(int i=1;i<=n;i++)
		for(int j=mid;j>=d[i];j--)
			dp[i][j]=max(dp[i-1][j],dp[i-1][j-d[i]]+d[i]);
	return max(dp[n][mid],sum-dp[n][mid]);
}

50分,答案偏大。

然后把 dp 第一维去掉就A了……?

然后考虑到可能是因为 for(int j=mid;j>=d[i];j--) 如果 d[i]>mid 这个循环根本不会执行,于是在第一重循环内加上了一个 dp[i][mid]=dp[i-1][mid]。结果最后两个点WA了……

求助qwq

2022/8/18 09:18
加载中...