無限重數多重揹包,
問題描述:有物品集v[0...n-1],每個物品都有無限個,揹包大小為c,求取得c大小揹包的最小物品個數。
f[0]=0;
f[i]=min;
當c很大n不大時的優化方法,設vm=max,根據frobenius number進行保守估算,當c>=vm*n是恒有解的
因此,只要dp求得c屬於[0,vm*n+vm)上的最優解,當c=vm*n+vm時,一定可以貪心歸約到區間[vm*n,vm*n+vm)上。
#include
#include
using namespace std;
int dp[10001];
int m[100];
int main()}}
if(n<=10000)
else }}
poj2955(括號匹配DP)
題意 給乙個由 四種字元任意排列組成的字串,求最長合法的不連續字串的長度。思路 dp的時候有點倍增的意思,算出來以每個位置開始任意長度內的答案。倍增著算,注意計算一段的時候先判斷兩頭是否可以匹配,然後再列舉分界點來繼續鬆弛。關鍵給的字串不超過100,資料太弱了 n 3 的複雜度。include in...
POJ 2955 (dp括號匹配)
題意 給出一行字串,裡面有 四種括號,求出有多少個已經匹配好的括號。思路 區間dp 我們把dp i j 表示從i到j裡面有多少已經配好的括號,那麼我們假如知道了 i 到 j 區間的最大匹配,那麼i 1到 j 1區間的就可以很簡單的得到。那麼 假如第 i 個和第 j 個是一對匹配的括號那麼dp i j...
POJ 2955 括號匹配,區間DP
題意 給你一些括號,問匹配規則成立的括號的個數。思路 這題lrj的黑書上有,不過他求的是新增最少的括號數,是的這些括號的匹配全部成立。我想了下,其實這兩個問題是一樣的,我們可以先求出括號要匹配的最少數量,那麼設原來括號的數量為l 新增了l 那麼其實原來括號匹配成功的括號數就是 l l 2 l 2。d...