洛谷P1005矩陣取數題解 zhengjun

2021-10-02 17:34:56 字數 2477 閱讀 4158

題目描述

帥帥經常跟同學玩乙個矩陣取數遊戲:對於乙個給定的n×m

n \times m

n×m的矩陣,矩陣中的每個元素ai,

ja_

ai,j​​

均為非負整數。遊戲規則如下:

每次取數時須從每行各取走乙個元素,共n

nn個。經過m

mm次後取完矩陣內所有元素;

每次取走的各個元素只能是該元素所在行的行首或行尾;

每次取數都有乙個得分值,為每行取數的得分之和,每行取數的得分 = 被取走的元素值×2i

\times 2^i

×2i,其中i

ii表示第i

ii次取數(從1

11開始編號);

遊戲結束總得分為m

mm次取數得分之和。

帥帥想請你幫忙寫乙個程式,對於任意矩陣,可以求出取數後的最大得分。

輸入格式

輸入檔案包括n+1

n+1n+

1行:第1行為兩個用空格隔開的整數n

nn和mmm。

第2∽ n+

1\backsim n+1

∽n+1

行為n ×m

n \times m

n×m矩陣,其中每行有m

mm個用單個空格隔開的非負整數。

輸出格式

輸出檔案僅包含1

11行,為乙個整數,即輸入矩陣取數後的最大得分。

輸入輸出樣例

輸入 #1

231

2334

2

輸出 #1
82
說明/提示

n oi

p2007

noip\ 2007

noip20

07提高第三題

資料範圍:

60

%60\%

60%的資料滿足:$1\le n, m \le 30,答案不超過1016

10^10

16100

%100\%

100%

的資料滿足:1≤n

,m≤8

1\le n, m \le 8

1≤n,m≤

8,0≤ai

,j

≤1000

0 \le a_ \le 1000

0≤ai,j

​≤10

00首先,可以很快判斷出,這是一道區間動態規劃的題,我就乾脆打了個遞迴式的動態規劃。

用f i,

jf_

fi,j

​表示刪到頭是i

ii,尾是j

jj時最多的得分

轉移公式:

f i,

j=ma

x(fi

+1,j

+ai×

2m+i

−j−1

,fi,

j−1×

2m+i

−j−1

)f_=max(f_+a_i \times 2^ ,f_\times 2^)

fi,j​=

max(

fi+1

,j​+

ai​×

2m+i

−j−1

,fi,

j−1​

×2m+

i−j−

1)最後,這題還會爆lon

glon

glong long

longlo

ng。要麼用高精度;要麼用__i

nt

128\_\_int128

__int1

28所以,我用了__i

nt

128\_\_int128

__int1

28,方便一點。

#include

#define in(x) x=read()

#define maxn 81

#define bll __int128

using

namespace std;

inline

void

read

(register

int&x)

while

(c>=

'0'&&c<=

'9')

}int n,m;

int num[maxn]

;bll ans,p[maxn]

,f[maxn]

[maxn]

;bll dp

(int l,

int r)

void

print

(bll x)

intmain()

if(!ans)

printf

("0"

)//特判0

else

print

(ans)

;return0;

}

洛谷題解 P1005 矩陣取數遊戲

這真是一道有趣的題目。垃圾乙個 首先,我們知道,有乙個c 11才有的東西 int128,它的上界是 2 1 然後,我們知道,有乙個叫巨集定義的東西,它可以長這樣 define int int128。最後,有乙個玄學知識,main函式不僅可以是int,也可以是signed。基礎玄學知識介紹完畢。接下來...

洛谷p1005矩陣取數遊戲

原題 2 80超int,需要高精度計算,也可以int128.行和行之間沒有聯絡,所以只要單獨求每一行之後取和即可,dp過程中i,j分別表示左端點和右端點。include define lll int128 void print lll x int n,m lll ans 0 int a 100 ll...

洛谷 P1005 矩陣取數遊戲

好多題解的f i j 表示還剩 i j 沒取的最大值,如果這樣寫的話,最後還要取個max f i i a i 2 m 如果轉化一下題意來做也是可以的。include define int int128 不會高精,只能 int128水一波了,如果考試考到,也只能放棄了 using namespace ...