WA#4求调
  • 板块P1489 猫狗大战
  • 楼主WJnY
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/10 20:10
  • 上次更新2024/8/10 21:26:40
查看原帖
WA#4求调
1284725
WJnY楼主2024/8/10 20:10
#include <cstdio>
#include <bitset>
using namespace std;
int n,a[212];
bitset<167> dp[202][202];
int min(int x,int y) {return (x<y)?x:y;}
int abs(int x){return(x<0)? -x:x;}
int main()
{
	scanf("%d",&n);
	for (int i=1;i<=n;i++) scanf("%d",a+i);
	dp[0][0][80] = 1;
	int s = 0;
	for (int i=1;i<=n;i++)
	{
		s += a[i];
		if (s<80) dp[i][0][80-s] = dp[i][i][80+s] = 1;
	}
	for (int i=1;i<=n;i++)
		for (int j=1;j<i;j++)
			dp[i][j] = (dp[i-1][j]>>a[i])|(dp[i-1][j-1]<<a[i]);
	int id=80,dif;
	while(dp[n][n/2][id]==0&&id>=0) id--;
	dif = 80-id;
	id = 80;
	while(dp[n][n/2][id]==0&&id<160) id++;
	dif = min(id-80,dif);
	printf("%d %d",(s-dif)/2,(s+dif)/2);
	return 0;
}
2024/8/10 20:10
加载中...