现在才AK,我的心啊……
T1:
题目大意:
两头公牛之间至少有有k头奶牛的组合有多少种?
dp.
设f[i]表示到前i头牛能组成的方案数.
分类讨论:
对于i<=k,则不可能放两只公牛,公牛放一只有i种,不放公牛也算一种,合起来就是i+1种
对于i>k,可以放n多只公牛,那么很明显,如果第i个为母牛,则方案数为f[i-1],若放公牛则方案数为f[i-k-1](这样子才能去重)
T2:
题目大意:
给你一堆计算公式,让你求一个最终的最优值。
分析:
注意,这些计算公式有一个特点,那就是根据下标的位置来计算的。
没看懂题的就可以ctrl+w了……
那么,设一个最容易想到的状态:
f[i,j]表示前i个数选j个数的最优值,且第i个必选。
则对于前i个数,因为计算值与下标有关,所以我们还需枚举一个下标k,前k个数的值可以直接通过状态值求出。
而k+1到i-1需要计算得出值,设为sum(这也需要个循环)
f[i,j]=min{sum+f[k,j-1]}
这样就可以求解最优值了.
注意当我们对状态f[i,j]是否为最优值时,对于i+1到n的还要再算出来,这些也是需要费用的,费用也很容易算出来,直接按照公式第三步按部就班就Ok了.
时间复杂度将近O(n^4)
当然,还可以优化时间.
不先枚举个数j,先枚举k,然后求一个区间的值,记为sum,则可以为O(n³)
T3:
显然对于两种下车的奶牛(a,b),(c,d),若c>a,d<b,则如果车满的话肯定踢掉a,b
按照此思路然后用个邻接表求一下好了
具体取法如下:
如果当前前面上车的奶牛数为x,现在需要上车的奶牛加上x大于了总载量,则肯定先载到满之后在看余下的是否能代替一些牛。
T4:
连负边,走一遍spfa,注意:如果某一个点经过的次数“过多”就是出现了负环,输出无解即可。