題意:給三輛車,將1~n這n個點依次跑完,也就是說要想到達i+1,必須先到達i,
每兩個點之間都有花費,問最小的話費是什麼。
思路:設dp[i][j][k],為走的最遠的車,次元的車,最近的車在位置i,j,k的時候的最小
花費。具體轉移看**,感覺非常巧妙。
#include#include#includeusing namespace std;
const int inf=0x3f3f3f3f;
int dp[31][31][31];//分別為走的最遠,次遠,最近的車的位置
int cost[31][31], n;
int main()
}memset(dp, 0x3f, sizeof dp);
dp[1][1][1]=0;
for(int i=1; i<=n; i++)}}
int mn=inf;
for(int j=1; j<=n; j++)
for(int k=1; k<=j; k++)
mn=min(mn, dp[n][j][k]);
printf("%d\n", mn);
}return 0;
}
POJ 1171 Letter Game 解題思路
原題鏈結 題目意思大致如下 首先給你乙個可用字符集,比如 prog 那麼我們需要計算的單詞,都是在這個集合內的元素,否則單詞的權值是0 那麼可以組成的單詞rog pog rop等等 計算單詞的最大權值,但是單詞可以拼接起來。但是拼接起來後還是要在可用集合中,且個數都不能超支。下面是題目對用的程式 1...
poj3342 poj2342 樹形dp入門
poj3342 最近做樹形dp,渣渣 成喳喳喳辣,真是不開森。還是適合做基礎入門題。題意 比較好理解。就是一棵樹,選m個點,兒子和父親不能同時選。問最多能選多少個 題目中說的是上級,當然我這裡省略就是用父親節點和孩子結點表示啦 其實dp的內容很好想,d i 0 表示第i個點不選的結果,d i 1 表...
POJ 3254,POJ 1185(狀態壓縮DP)
poj 3254 corn fields 我們可以用二進位制列舉第一行狀態,用1代表在這種植,0代表不種植,第一行確定了,第二行就可以根據第一行不斷累加。dp row state 代表第row行用state狀態時的方法數。如果這個state合法,則dp row state dp row 1 stat...