WA #3求调
  • 板块P1489 猫狗大战
  • 楼主qsn123
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/15 18:02
  • 上次更新2024/10/15 20:19:38
查看原帖
WA #3求调
1078013
qsn123楼主2024/10/15 18:02

bool dp,感觉思路有一点点迷糊,hack数据已过,马蜂不是很良好

#include<bits/stdc++.h>
using namespace std;
const int N=205,M=45;
bool dp[N][N*M]={0};
int val[N]={0};
int main()
{
	int n,sum=0;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&val[i]);
		sum+=val[i];
	}
	int mid=sum/2,num=n/2+1;
	dp[1][val[1]]=1;
	for(int k=2;k<=n;k++)
	{
		for(int i=num;i;i--)
		{
			for(int j=mid;j>=val[k];j--)
			{
				dp[i][j]=(dp[i][j]|dp[i-1][j-val[k]]);
			}
		}
	}
	num--;
	int ans=0;
	for(int i=mid;i;i--)
	{
		if(dp[num][i])
		{
			ans=i;
			break;
		}
	}
	if(n%2==1)
	{
		num++;
		for(int i=mid;i;i--)
		{
			if(dp[num][i])
			{
				ans=max(ans,i);
				break;
			}
		}
	}
	printf("%d %d",ans,sum-ans);
}
2024/10/15 18:02
加载中...