2 条题解

  • 0
    @ 2026-6-25 12:02:30

    二分,搜索,dp等常用算法可以尝试是否可行

    二分答案将“直接求出答案”变成“判定答案是否可行”(感觉也是一种正难则反)

    我们可以n^2暴力check

    bool check(int x){
    	int c[60],b[60],d[60];
    	memcpy(c,a,sizeof a);
    	memset(b,0,sizeof b);
    	b[0]=x;
    	for(int i=1;i<=n;i++){
    		memset(d,0,sizeof d);
    		for(int j=0;j<n-1;j++){
    			if(b[j]>c[i]){
    				d[j+1]+=c[i],b[j]-=c[i],c[i]=0;break;
    			}
    			else d[j+1]+=b[j],c[i]-=b[j],b[j]=0;
    		}
    		for(int j=0;j<=n-1;j++) b[j]+=d[j];
    	}
    	return b[n-1]==x;
    }
    

    当然也有n的做法:

    把n种珠子填到x个项链中(一种珠子对一条项链最多只能造成1的贡献),若 最后x个项链中都有>=n-1个珠子 则合法,

    其中珠子有个数限制,我们发现这是关键矛盾

    那么尝试先不管个数限制,给x条项链都填上n个珠子,然后再把不够的珠子删掉

    sum记录有多少珠子减了1

    for(int i=1;i<=n;i++){
        sum+=max(0,x-a[i]);
    }
    return sum<=x;
    

    信息

    ID
    278
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    12
    已通过
    6
    上传者