區間DP ZOJ 3469 待續

2021-08-19 21:43:14 字數 676 閱讀 1324

最開始想是旅行商問題,因為最終要回到起點,但是如果遍歷完所有的點了,回去的話,不會有悲傷值增加的情況

還沒有想明白為什麼區間dp可以求解這個問題???後面再更新

分析一下這個題:假設現在已經遍歷到了區間[l,r],前提為中間的所有區間的數值已經知道了,那麼可以一步轉換到當前狀態的為[r+1,l]、[r,l-1],那麼當前狀態下,快遞員所在的位置我們也不知道,所以我們將dp拓展為三維dp[i][j][k]  如果k==0,表示當前在位置i,k==1,表示當前在位置j,那麼就可以得到新的狀態

#include #include #include #include using namespace std;

const int maxn=1010;

const int inf=0x3f3f3f3f;

struct node

;node node[maxn];

int dp[maxn][maxn][2];

bool cmp(node a,node b)

//這裡回去的話我們不用擔心,因為已經送完了,那麼最終的答案就不會再增長了

printf("%d\n",v*min(dp[1][n][0],dp[1][n][1]));//本題的v一定要留到後面來乘,中間dp的時候乘可能會溢位

}return 0;

}

3個區間DP總結

include include include include include include include include 自動從小到大排序,且沒有重複 using namespace std const int maxn 100 5 const int inf 1e9 int n int a ...

week 3 B 區間選點

數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 不同區間內含的點可以是同乙個 第一行1個整數n n 100 第2 n 1行,每行兩個整數a,b a,b 100 乙個整數,代表選點的數目 21 5 4 63 1 32 5 4 6該題的貪心策略是 選取區間的最後乙個點...

week3 B 區間選點

數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 不同區間內含的點可以是同乙個 input 第一行1個整數n n 100 第2 n 1行,每行兩個整數a,b a,b 100 output 乙個整數,代表選點的數目 sample input 215 46sample ...