2011多校联合五部分解题报告

来源:互联网 发布:excel数据透视怎么做 编辑:程序博客网 时间:2024/05/01 00:13

        1001(hdu3879 Base Station),建每个城市要一些费用,连接已建好两城市间有一些的盈利,问建哪些城市使得总盈利最大

        这题开始出的非常快,而我不会,感觉是网络流,我负责这块,把我急死了。建图为新加一源点S,汇点T,源点连每个城市,权值为建城市所需费用,城市连铁路权值为无穷,铁路连汇点权值为铁路的盈利。最后的结果是铁路的总盈利减去最大流。

           详情请参见07年OI王欣上的论文。。。这个压力很大,以后要多看论文啊。。。

        1002 Lucky Numbers输入a,b,m。对于任意一个正整数k,现要构造一个集合,k*a,k*b至少有一个在集合中,同时若k*a,k*b有一个大于m,则可以都不在集合中(a,b互质),求集合中元素的最少个数。不妨设a>b,开始以为a,b互质,答案直接是m/a,集合中的数为a,2*a,3*a...但细想之后发现a*b出现的话,a*a就不用出现了,因为a*b是b的a倍,所以不用出现a的a倍,这样的数共有m/(a*a)个。以为结果就是m/a-a/(a*a),WA了之后发现,在没有加入集合的的数中,有些还是第一次a*b的倍数,这不加入集合的话,那么就要加入b的哪些倍了。例如a*a*b是a*a的整数倍属于上面去除的数,它是b的a*a倍,它没出现的话,a的a*a倍就要出现了。所以就要加回来。。。现在很清晰了,典型的容斥原理。

        1005 CS and Sugar给一个矩阵,每次取的数必须在上一次的左边和上边,且绝对值比前一个绝对值必须大。现有两个人,每个人取最优的情况,循环取数,得分为取的数。直至不能再取了。求第一个人比第二个人得分多多少?

        因为每个人都是最优的,所以每步都是跳往最优的情况去,不管是对手取数还是自己取数。所以只要设一个状态dp[i][j]表示从i行,j列开始取数的最优值就行。对绝对值还有要求,而每个数的绝对值会<=100。所以加一维,dp[i][j][k]从i行,j列开始取数,且绝对值大于等于k的最优值。那么dp[i][j][k]=max(dp[i-1][j][k],dp[i][j-1][k])//不取a[i][j]的情况。若|a[i][j]|>=k且k-max(dp[i-1][j][|a[i][j]|+1],dp[i][j-1][|a[i][j]|+1)>dp[i][j][k]则更新dp[i][j][k]//取a[i][j]的情况。

        1009在一棵树中,求每个结点的子结点值比它小的个数。深搜过程中,对每个结点去的时候统计一下比它小的个数,回的时候再统一一下,两次的差就是此结点的结果。因为结点太多,会暴栈,所以需要模拟深搜的过程。

原创粉丝点击