0%

START195B——Game (Hard)(分治搜索)

思路讲解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
	// 随着钱数的增加,进行的二操作总是在增加的
function<void(ll,ll,ll,ll)> div=[&](ll k,ll kk,ll p,ll pp)->void{
if(k>kk){
return;
}
ll mid=k+kk>>1;
ll ans=Sum[min(N,mid)];ll mp=0;
FOR(i,p,min(mid/2,pp)){
ll kejia=mid-i*2;
kejia+=i;
kejia=min(kejia,N);
ll lans=(kejia-1+kejia-i)*i/2;
lans+=Sum[kejia];
if(lans>ans){
ans=lans;
mp=i;
}
}
Ans[mid]=ans;
#ifdef LOCAL
debug(mid);
debug(ans);
debug(pp);
#endif
div(k,mid-1,p,mp);
div(mid+1,kk,mp,pp);
};

AC代码

https://www.codechef.com/viewsolution/1173480410

心路历程(WA,TLE,MLE……)