2 条题解
-
0
二分,搜索,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
- 上传者