预计得分:100+60+40=200
第一题(P1858 -- 土地利用):
非常标准的动规。f[i][j]表示在前i种中选取某一些的情况下,面积为j。使用到的面积。很明显,最后的答案就是S-f[n-1][S](j从0开始)
那么它的状态转移方程是:f[i][j]=max(f[i-1][j-a[i]]+a[i],f[i][j-1])。需要用到尽可能多的面积使用max不用多说,max中前半段表示,把i这一种房产建起来使用的地产面积(a[i]是第i个房产的面积),后半段是不建房子。边界注意一下即可。
第二题(P1233 -- 售楼大会):
我只能说,和[P1659 -- 合唱队形]几乎是一样的题目啊!就是弱化了。
一开始想到的是最长上升/下降,以i为开头和结尾做一遍。这个就是上次比赛的做法。但是很明显,回文现在未知。
想到一点点思路:如果我们已经知道了回文的内容,那么可以在O(N)的时间之内找出是否可能。
似乎不可以?又想到一个:如果对于相同的字母,我们对它建索引呢?
似乎可以?我们把a[i]展开成所有和它相同字母,在它后面(或本身)的下标,如abcaaa中,第一个a变成5,4,3,0,第二个a变成5,4,3。这样变成了一串数字以后,直接做最长上升子序列!
只有26个字母,很明显,每个字母平均展开成38位数,1000*38=38000。问题是它不仅需要长度,还要表达式!所以只能使用O(N^2)的算法,T。不过60还是可以的。
第三题(P1537 -- 投资):
标准的多重背包。理论最优复杂度O(VN),使用单调队列的方法参考百度吧。我去看看了。