經典動態規劃題目 POJ 1015

2021-06-09 22:53:32 字數 763 閱讀 3428

在文章開始時,先宣告一下,小弟剛開始接觸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...