(1)0-1背包:
如果有一个背包,总载重量为Wt,有n个物品,每个物品重Wi,每个物品价值Ci,那么如何装才能让这个包里面东西的价值最高?
dp[i][j]为前i个物品当中选择装进一个载重量为j的包里最大价值,则:
初始化:dp【0】【x】=0;for i=0-》n;j=0-》Wt
dp[i][j]的值为:dp[i-1][j](第i个物品不装进包里),dp[i-1][j-Wi]+Ci(第i个物品装进包里)的较大者。
(2)有代价的最短路径(动态规划和dijkstra混合使用):
寻求点1到点A之间的最短路,但是每到一个点就会消耗一点钱,这个值用money【i】来表示,钱不够路不通,初始有钱N。
dp【i】【j】为走到第i个点,还剩j钱的最短路径,则:
初始化dp【x】【y】=inf;dp【1】【N-money[1]】=0;ifvisited[x][y]=false;ifVisited[1][N-money[1]]=true;
shortest=inf;
moneyLeft=inf;
number=inf;
while(1){
for(int z=0;z<A;z++)
for(int x=0;x<N;x++){
if(dp[z][x]<number){
shortest=z;
mo