在文章開始時,先宣告一下,小弟剛開始接觸acm,水平有限,所以這裡給出的程式是閹割版的,只實現了關鍵功能,無法ac
這道題類似於經典的陣列分割問題,可參見《程式設計之美》2.18
#include #include const int max_n = 202;
const int max_m = 22;
const int max_sum = 1001;
bool dp[max_n][max_sum];
int path[max_n][max_sum];
bool is_neg[max_n][max_sum];
int pcs[max_n];
int dfs[max_n];
int min2(int a, int b)
void solve(int n, int m)
}} }
i = m;
j = base;
while (j <= 2*base && !dp[i][j])
k = base - 1;
while (k >= 0 && !dp[i][k])
printf("%d %d\n", j-base, k-base);
k=j;
while (i >= 1)
}void input()
memset(dp, 0, sizeof(dp));
solve(n, m); }}
int main()
poj 1015 動態規劃 難
這道題我是看別人的思路寫的,因為有個絕對值,無法轉移狀態,自己傻得非要把絕對值表示出來,其實可以在計算完成後篩選,我這個菜鳥估計是受揹包的的影響,想狀態的時候還想著前幾個中選出多少個。這道題的狀態是f i j i選了的人數,邊界為零,目標為m,j為d p a 的差值和,f值為d p b 值。記如何狀...
POJ 1015 陪審團人選 動態規劃
用f i j 表示,取i個候選人,使其辯控差為j 的所有方案中,辯控和最大的那個方案的控辯和。要求f i j 顯然要從乙個可行的方案 f i 1 x 演化而來。可行方案f i 1,x 能演化成方案f j,k 的必要條件是 存在某個候選人k,k 在方案f i 1,x 中沒有被選上,且x v k j v...
POJ1015和uva323動態規劃01揹包擴充套件
題解 一開始以為這個符合最優子結構的動態規劃,但是後來看了別人的題解發現不符合最優子結構,無法將所有的狀態轉移。因為可能我選了前面這個但是如果我選另外乙個加上本身更優,這個時候選擇沒辦法選擇另外乙個因為已經消失了,這個時候可以用01揹包的思想做並且用乙個vector陣列記錄一下路徑,用陣列第二維20...