仍是多執行緒dp,這次直接斜著讀入,方便寫dp方程。
以6×4的圖為例,讀入順序如表(從左至右,從上至下,不用管那些0)
for(int i = 1; i
<= m; ++i) for(int j = 1; j
<= n; ++j)
read(map[i+j-1]
[i]);
---
----
--00
0000
0000
00(1,4)
(2,4)
(3,4)
(4,4)
(5,4)
(6,4)00
(1,3)
(2,3)
(3,3)
(4,3)
(5,3)
(6,3)00
(1,2)
(2,2)
(3,2)
(4,2)
(5,2)
(6,2)00
(1,1)
(2,1)
(3,1)
(4,1)
(5,1)
(6,1)00
0 dp時注意除了(1,1)和(m,n)其餘的要判斷是否是同乙個點,若是則忽略,不是則轉移狀態。
code:
#include
#include
using
namespace
std;
const
int maxn = 110;
intmap[maxn][maxn], f[maxn][maxn][maxn], n, m;
inline
void read(int &a)
while(ch >= '0' && ch <= '9')
a *= f;
}inline
void write(int a)
do while(a);
while(top--) putchar(ch[top]);
putchar('\n');
}inline
void init()
inline
void work()
}write(f[m+n-1][m][m]);//這裡的點的順序是右上到左下,所以(m,n)是第m+n-1條斜線上的第m個格仔
}int main()
NOIP2008傳紙條 DP 費用流
在乙個矩形上求兩條不相交的價值最大的路徑 常規dp題,略過 這道題可以作為費用流入門題,可以很好理解費用流的用途 1 找出方案可行 考慮最大流建圖方法 首先因為要找不想交的兩條路徑,我們可以限制每個點只被選擇一次,對於點的限制一般是拆點的套路。將乙個點i拆分為2個點,i和i 並且連邊權為1,這樣就可...
動態規劃入門 NOIP2008 傳紙條
小淵和小軒是好朋友也是同班同學,他們在一起總有談不完的話題。一次素質拓展活動中,班上同學安排做成乙個m行n列的矩陣,而小淵和小軒被安排在矩陣對角線的兩端,因此,他們就無法直接交談了。幸運的是,他們可以通過傳紙條來進行交流。紙條要經由許多同學傳到對方手裡,小淵坐在矩陣的左上角,座標 1,1 小軒坐在矩...
NOIP2008 傳紙條(DP及滾動陣列優化)
傳送門 這道題有好多好多種做法呀 先說一下最暴力的,o n 4的做法 我們相當於要找兩條從左上到右下的路,使路上的數字和最大。所以其實路徑從 開始走並不重要,我們就直接假設全部是從左上出發的好啦。設dp i j p q 表示第一條路列舉到點 i,j 第二條路列舉到點 p,q 時,當前能取到的最大值。...