社区讨论

求条TLE92pts WAon#12

P1528切蛋糕参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mketebdf
此快照首次捕获于
2026/01/15 10:12
上个月
此快照最后确认于
2026/01/17 23:10
上个月
查看原帖
照着 这个 写的
CPP
#include<bits/stdc++.h>
using namespace std;

const int N=55,M=1050;
int n,m,a[N],b[M];
int pre[M];
int maxn,sum;
int now,need;
int wst;

bool dfs(int x,int st)
{
	if(x<1)
		return 1;
	if(now-wst<need)
		return 0;
	bool flag=0;
	for(int i=st;i<=n;i++)
	{
		if(a[i]<b[x])
			continue;
		need-=b[x];
		now-=b[x];
		a[i]-=b[x];
		bool use_wst=0;
		if(a[i]<b[1])
		{
			wst+=a[i];
			use_wst=1;
		}
		if(b[x]==b[x-1])
		{
			if(dfs(x-1,i))
				flag=1;
		}
		else if(dfs(x-1,1))
			flag=1;
		if(use_wst)
			wst-=a[i];
		now+=b[x];
		need+=b[x];
		a[i]+=b[x];
		if(flag)
			return 1;
	}
	return 0;
}

bool start_dfs(int x)
{
	now=sum;
	need=pre[x];
	wst=0;
	return dfs(x,1);
}

int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i],maxn=max(maxn,a[i]),sum+=a[i];
	cin>>m;
	for(int i=1;i<=m;i++)
		cin>>b[i];
	sort(b+1,b+m+1);
	for(int i=1;i<=m;i++)
		pre[i]=pre[i-1]+b[i];
	int l=1,r=m,mid,ans=m;
	while(b[r]>maxn)
		r--;
	while(l<=r)
	{
		mid=l+(r-l)/2;
		if(start_dfs(mid))
			ans=mid,l=mid+1;
		else
			r=mid-1;
	}
	return !(cout<<ans<<'\n');
}

回复

0 条回复,欢迎继续交流。

正在加载回复...