洛谷P1006 NOIP提高組2008 傳紙條

2022-05-02 15:36:12 字數 2636 閱讀 4872

小淵和小軒是好朋友也是同班同學,他們在一起總有談不完的話題。一次素質拓展活動中,班上同學安排做成乙個m行n 列的矩陣,而小淵和小軒被安排在矩陣對角線的兩端,因此,他們就無法直接交談了。幸運的是,他們可以通過傳紙條來進行交流。紙條要經由許多同學傳到對方手 裡,小淵坐在矩陣的左上角,座標(1,1),小軒坐在矩陣的右下角,座標(m,n)。從小淵傳到小軒的紙條只可以向下或者向右傳遞,從小軒傳給小淵的紙條 只可以向上或者向左傳遞。

在活動進行中,小淵希望給小軒傳遞一張紙條,同時希望小軒給他回覆。班裡每個同學都可以幫他們傳遞,但只會幫他們一次,也就是說如果此人在小淵遞給小軒紙條的時候幫忙,那麼在小軒遞給小淵的時候就不會再幫忙。反之亦然。

還有一件事情需要注意,全班每個同學願意幫忙的好感度有高有低(注意:小淵和小軒的好心程度沒有定義,輸入時用0表示),可以用乙個0-100的自 然數來表示,數越大表示越好心。小淵和小軒希望盡可能找好心程度高的同學來幫忙傳紙條,即找到來回兩條傳遞路徑,使得這兩條路徑上同學的好心程度只和最 大。現在,請你幫助小淵和小軒找到這樣的兩條路徑。

輸入格式:

輸入檔案message.in的第一行有2個用空格隔開的整數m和n,表示班裡有m行n列(1<=m,n<=50)。

接下來的m行是乙個m*n的矩陣,矩陣中第i行j列的整數表示坐在第i行j列的學生的好心程度。每行的n個整數之間用空格隔開。

輸出格式:

輸出檔案message.out共一行,包含乙個整數,表示來回兩條路上參與傳遞紙條的學生的好心程度之和的最大值。

輸入樣例#1:

3 3

0 3 9

2 8 5

5 7 0

輸出樣例#1:

34
【限制】

30%的資料滿足:1<=m,n<=10

100%的資料滿足:1<=m,n<=50

noip 2008提高組第三題

【題解】

dp[i][x1][x2]表示走了x步,(1,1)到(x1, i - x1 + 2), (0,0)到 (x2, i - x2 + 2)

轉移即可

注意x1 == x2時為0,看到網上很多題解是「x1 == x2時會重複取某個點,所以加的時候只加一次」拜託根本沒法走到

那個地方好嗎,網上題解清一色都是這樣寫的(除了hzwer),你們寫題解的時候能不能動動腦子別照著別人的題解思路

硬搬啊注意,做減法的時候可能變負數,

1 #include 2 #include 3 #include 4 #include 5 #include 6

#define min(a, b) ((a) < (b) ? (a) : (b))

7#define max(a, b) ((a) > (b) ? (a) : (b))

89 inline void read(long

long &x)

1016

17const

long

long maxn = 60 + 5;18

const

long

long maxm = 60 + 5;19

20/*

21dp[x1][y1][x2][y2]表示(1,1)到(x1,y1), (0,0) 到(x2,y2)的最長路

22dp[i][x1][x2]表示走了x步,(1,1)到(x1, i - x1 + 2), (0,0)到 (x2, i - x2 + 2)

23*/

2425

26long

long n,m,g[maxn][maxm],dp[maxn +maxm][maxn][maxn];

2728

intmain()

2938

else

if((n == 1 && m == 2) || (n == 2 && m == 1

))39

43 register long

long ma = n + m - 3;44

for(register long

long i = 1;i <= ma;++i)

45for(register long

long x1 = 1;x1 <= n && i - x1 + 2 >= 1;++x1)

46for(register long

long x2 = 1;x2 <= n && i - x2 + 2 >= 1;++x2)

47if(x1 == x2)dp[i][x1][x2] = 0;48

else dp[i][x1][x2] = max(dp[i - 1][x1 - 1][x2], max(dp[i - 1][x1][x2 - 1], max(dp[i - 1][x1 - 1][x2 - 1], dp[i - 1][x1][x2]))) + g[x1][i - x1 + 2] + g[x2][i - x2 + 2

];49 printf("

%lld

", max(dp[n + m - 3][n - 1][n], dp[n + m - 3][n][n - 1]) + g[n][m] - g[1][1

]);50

return0;

51 }

noip2008 傳紙條

洛谷P2827 NOIP2016 提高組 蚯蚓

題鏈 最長的蚯蚓被砍兩截之後,其餘的蚯蚓長度會增加,與其加其餘蚯蚓不如對這兩隻蚯蚓操作,可定義乙個buff表示其餘蚯蚓需要增加多少長度,當拿出最長的那只蚯蚓時,就需要加上buff,當然被剪斷的變成兩條就需要減去當前buff再壓入佇列,保證下次拿出來時加上buff是應有的長度 乙個佇列存原陣列,另外兩...

P1006 NOIP2008 提高組 傳紙條

小淵和小軒是好朋友也是同班同學,他們在一起總有談不完的話題。一次素質拓展活動中,班上同學安排坐成乙個 m 行 n 列的矩陣,而小淵和小軒被安排在矩陣對角線的兩端,因此,他們就無法直接交談了。幸運的是,他們可以通過傳紙條來進行交流。紙條要經由許多同學傳到對方手裡,小淵坐在矩陣的左上角,座標 1,1 小...

NOIP2002提高組 洛谷P1031均分紙牌

題目描述 有 n 堆紙牌,編號分別為 1,2,n。每堆上有若干張,但紙牌總數必為 n 的倍數。可以在任一堆上取若於張紙牌,然後移動。移牌規則為 在編號為 1 堆上取的紙牌,只能移到編號為 2 的堆上 在編號為 n 的堆上取的紙牌,只能移到編號為 n 1 的堆上 其他堆上取的紙牌,可以移到相鄰左邊或右...