Noip2008傳紙條題解

2021-07-01 21:28:56 字數 1233 閱讀 3869

仍是多執行緒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 時,當前能取到的最大值。...