在网上观战的时候群里算法都说的差不多了,然后杭电把题目挂出来以后和君爷又去做了下,据tracyzhu说知道算法以后再去做要损RP的,希望RP别降太多。基本把水题搞完了,还剩下一个3D凸包,一个DLX和一个O(n)DP,有空再去搞,斜率优化DP基本看完了,过几天估计就能a掉了。
A:
树形DP,treedp(cur,flag)表示访问到cur点,flag为1Alice走取最小的,0表示Bob走取最大的。
做的时候被时限恶心到了,用vectorTLE,改成临接表还是TLE,最后用输入外挂1000msa掉的,不用输入外挂的话把算到根节点距离的那个dfs集成到树形dp里也能1900ms卡过
B:
贪心,排序,a从大到小,b从小到大取过来。如果没听群里讨论的话有可能也会跳进匹配这个坑里。
C:
3D凸包不会
D:
DLX不会
E:
推公式,dp[i][k]=dp[i-1][k]*(k+1)+dp[i-1][k-1]*(i-k);
dp[i][k]放完前i个数产生k个e-value的个数,由两部分构成:
首先因为i当前是最大的所以i怎么放e-value都不会减少
1.
前i-1个数已经有了k个e-value,然后第i个数放到i这个位置上e-value不会增加,放到前面已经产生k个e-value的地方上e-value也不会增加,所以第i个可以放k+1个位置,即dp[i-1][k]*(k+1);
2.
前i-1个数只有k-1个e-value,所以i这个数放下去必须多出一个e-value,那就只能放到前i-1个位置中没有产生e-value的地方使其多出一个e-value来,可以放i-1-(k-1)个,即dp[i-1][k-1]*(i-k);
F:
10个点的最短路,floyd即可
G:
差分约束
题目要求是否存在2个数组a,b使得L=<a[i]*map[i][j]/b[j]<=U,两遍取对数变成:
log(L)<=log(a[i])+log(map[i][j])-log(b[j])<=U,这样就直接可以套差分约束方程了。
构图:
H:
凸费用流,由于流量最多为5,可以将边拆开为(1,1)(1,3)(1,5)(1,7)(1,9)的边,由于是最小费用流,所以每次先流费用小的,要流(1,3)这条边的话(1,1)肯定已经先流过了,这是容量为2,费用为2^2,别的同理。。
I:
积分,君爷用龙贝格搞的,不解释,据说有O(1)的公式??
J:
几乎就是原题,USACO Monthly,March,2008 Gold,斜率优化DP,还没写过。。