T1:
这道题很明显是一道二分的题目。然而许多人竟然不用二分就水过了,佩服佩服。
一开始在考场上二分的是两人的电费。但发现这样子二分是不可以的,因为不知道总钱数是否能被那些价格整除,有时就会出错。
但其实只需换一种思路,改为二分两个人的电量。
二分一个人的电量,那么另一个人的电量就可以通过题目给出的n算出。
知道了两个人的电量,则可以判断是否符合标准了。
T2:
这道题很明显是DP,然而考场上时根本没想法,普通的DP是行不通的,因为成环。
但其实有时候应该多想想。
一个环,假设已经求出了最大值,那么最小值就显然了。
一个环,如果最大值是首尾相连的,那么最小值则必定不首位相连,反之亦然。
那么,我们只需求一个环的最大值以及环的最小值就可求得答案了。
状态:
f[i,j,0]表示前i个数分成了j段,第i个数不选的最大值;
f[i,j,1]表示前i个数分成了j段,第i个数选的最大值;
d[i,j,0]表示前i个数分成了j段,第i个数不选的最小值;
d[i,j,1]表示前i个数分成了j段,第i个数选的最小值;
f[i,j,1]:=max(f[i-1,j,1],f[i-1,j-1,0])+a[i];
f[i,j,0]:=max(f[i-1,j,1],f[i-1,j,0]);
d[i,j,1]:=min(d[i-1,j,1],d[i-1,j-1,0])+a[i];
d[i,j,0]:=min(d[i-1,j,1],d[i-1,j,0]);
(MDZZ...)
那么求出了f和d数组之后,答案就是
max(f[n,k,0],f[n,k,1])
max(sum-d[n,k,0],sum-d[n,k,1])
的max
T3:
这道题就是约数国王。
怎么求一个1~n里面拥有最多因数个数的数中的最小数呢?
很明显,(除1外)任何一个正整数是由质因子构成的。
那么,我们则可以枚举质因子,并枚举质因子的个数从而求得这个拥有最多因数个数的数。
设
f[i,j]表示拥有i个质数,j个因数的最小数。
f[i,j] 很明显 可以更新
f[i+1,j*(k+1)]
这里的i指第i个质数,j表示所求的数一共有j个因数,而k则乘上多少个第i个质数。
求得之后,再求一个c[j]表示有j个因数的最小数。
很明显c[j]=min{f[i,j]}
最后判断一下c[i]的值并求个最小就可了。