小淵和小軒是好朋友也是同班同學,他們在一起總有談不完的話題。一次素質拓展活動中,班上同學安排做成乙個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輸出樣例#1:0 3 9
2 8 5
5 7 0
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 6noip2008 傳紙條#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 }
洛谷P2827 NOIP2016 提高組 蚯蚓
題鏈 最長的蚯蚓被砍兩截之後,其餘的蚯蚓長度會增加,與其加其餘蚯蚓不如對這兩隻蚯蚓操作,可定義乙個buff表示其餘蚯蚓需要增加多少長度,當拿出最長的那只蚯蚓時,就需要加上buff,當然被剪斷的變成兩條就需要減去當前buff再壓入佇列,保證下次拿出來時加上buff是應有的長度 乙個佇列存原陣列,另外兩...
P1006 NOIP2008 提高組 傳紙條
小淵和小軒是好朋友也是同班同學,他們在一起總有談不完的話題。一次素質拓展活動中,班上同學安排坐成乙個 m 行 n 列的矩陣,而小淵和小軒被安排在矩陣對角線的兩端,因此,他們就無法直接交談了。幸運的是,他們可以通過傳紙條來進行交流。紙條要經由許多同學傳到對方手裡,小淵坐在矩陣的左上角,座標 1,1 小...
NOIP2002提高組 洛谷P1031均分紙牌
題目描述 有 n 堆紙牌,編號分別為 1,2,n。每堆上有若干張,但紙牌總數必為 n 的倍數。可以在任一堆上取若於張紙牌,然後移動。移牌規則為 在編號為 1 堆上取的紙牌,只能移到編號為 2 的堆上 在編號為 n 的堆上取的紙牌,只能移到編號為 n 1 的堆上 其他堆上取的紙牌,可以移到相鄰左邊或右...