help 91 #10wa
查看原帖
help 91 #10wa
816504
封禁用户楼主2024/7/16 16:17
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5,M=2e4+5;
int n,all,alla,f[M],a[N],b[N];
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d %d",&a[i],&b[i]);
		all+=a[i]+b[i];
		alla+=a[i];
	}
	memset(f,-1,sizeof(f));
	f[alla]=0;
	for(int i=1;i<=n;i++)
		for(int j=all;j>=0;j--)
			if(j-b[i]+a[i]>=0&&f[j-b[i]+a[i]]>=0)
			{
				if(f[j]>=0)
				{
					f[j]=min(f[j],f[j-b[i]+a[i]]+1);
				}
				else
				{
					f[j]=f[j-b[i]+a[i]]+1;
				}
			}
				
	if(all%2==0)
	{
		for(int i=0;i<=all;i+=2)
			if(f[(all-i)/2]>=0||f[(all+i)/2]>=0)
			{
				int ans=1e9;
				if(f[(all-i)/2]>=0) ans=f[(all-i)/2];
				if(f[(all+i)/2]>=0) ans=min(ans,f[(all+i)/2]);
				printf("%d",ans);
				return 0;
			}
	}
	else
	{
		for(int i=1;i<=all;i+=2)
			if(f[(all-i)/2]>=0||f[(all+i)/2]>=0)
			{
				int ans=1e9;
				if(f[(all-i)/2]>=0) ans=f[(all-i)/2];
				if(f[(all+i)/2]>=0) ans=min(ans,f[(all+i)/2]);
				printf("%d",ans);
				return 0;
			}
	}
		
}
2024/7/16 16:17
加载中...