portal:
dp經典題,ioi94考題,在各大oj上都有
1 #include2 #include3 #include水水的寫法4 #include5 #include6 #include7
using
namespace
std;
8#define for(i,j,k) for(int i=j;i<=k;i++)
9#define ford(i,j,k) for(int i=j;i>=k;i--)
10#define ll long long
11#define maxn 1010
12int
cost[maxn][maxn],dp[maxn][maxn];
13int
t,n;
14int
main()
15
這道題還有加強的版本,增加了資料規模和資料組數,然並卵 如uestc 1011
1 #include2 #include3 #include依然水水的寫法4 #include5 #include6 #include7
using
namespace
std;
8#define for(i,j,k) for(int i=j;i<=k;i++)
9#define ford(i,j,k) for(int i=j;i>=k;i--)
10#define ll long long
11#define maxn 110
12int
cost[maxn][maxn],dp[maxn][maxn];
13int
t,n;
14int
main()
1530}31
return0;
32 }
據我理解:dp是建立在各子問題的獨立與子問題的最優子結構上的
值得注意的是,這道題的dp有兩種寫法
dp[i][j]既可以表示以(i,j)為起點的路徑長度最大值
也可以表示以(i,j)為終點的路徑長度最大值
當然都是最大值啦daze
如果這題要輸出任意一種最長路徑的話,用進行dp較優
這是因為路徑的直接無回溯輸出是由頂向底,所以它要求每個經過點都有確定的後驅,所以用
當然用的話寫個簡單的回溯取解就好了,有點煩啊。。。
話說這道題的dp決策樹似乎是個dag,說來dag滿足各種dp條件啊,那豈不是只要碰到dag就可以拿dp亂搞了? ふっふっと
POJ 1163數字三角形
所犯錯誤 1 在迴圈中用scanf輸入陣列元素時時,忘記敲 位址符,導致程式停止,改正 2 在測試時想輸出這個二維陣列的所有元素,雖然用了雙重迴圈,但輸出時只寫了a i 導致輸出了位址 3 這道題不能用萬能標頭檔案,識別不了,可以用 include 心得 1 73 8 8 1 0 2 7 4 4 4...
poj1163 數字三角形 動態規劃
1.記憶遞迴型 自頂向下 d i j 來存數字 典型的遞迴問題 d r,j 出發,下一步只能走d r 1,j 或者d r 1,j 1 故對於n行的三角形 if r n maxsum r,j d r,j else maxsum r,j max maxsum r 1,j maxsum r 1,j 1 d...
POJ1163 數字三角形 經典DP題目
題目大意 如圖所示的數字三角形,從頂部出發,在每一結點可以選擇向左走或得向右走,一直走到底層,要求找出一條路徑,使路徑上的值的和最大。圖是我盜的 如果用陣列num j i 表示j行i列的數字,dp j i 表示從該位置向下走的子問題的最優解,整個問題最終就是要求解dp 1 1 就是最頂端的位置的最優...