写了一个背包:
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