1574 矩陣取數遊戲

2021-10-20 05:29:00 字數 2906 閱讀 2757

1574:矩陣取數遊戲

時間限制: 1000 ms 記憶體限制: 524288 kb

提交數: 618 通過數: 248

【題目描述】

經常和同學玩乙個矩陣取數遊戲:對於給定的 n×m 的矩陣,矩陣中每個元素 aij 均為非負整數。遊戲規則如下:

1、每次取數時必須從每行各取走乙個元素,共 n 個,m 次取完所有元素。

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

3、每次取數都有乙個的分值,為每行取數得分之和,每行取數得分==被取走元素值×2i ,其中 i 表示第 i 次取數,從 1 開始計數。

4、遊戲結束時,總得分為 m 次取數得分之和。

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

【輸入】

輸入包括 n+1 行。 第一行兩個空格隔開的正整數 n,m 接下來 n 行每行 m 個用空格隔開的整數。

【輸出】

輸出為乙個整數,為所輸入矩陣取數後的最大得分

【輸入樣例】

2 31 2 3

3 4 2

【輸出樣例】

82【提示】

樣例解釋 1

第一次:第一行取行首元素,第二行取行尾元素,本次得分為 1×21+2×21=6;

第二次:兩行均取行首元素,本次得分為 2×22+3×22=20;

第三次:本次得分為 3×23+4×23=56,總得分為 6+20+56=82。

樣例輸入 2

1 44 5 0 5

樣例輸出 2

122樣例輸入 3

2 10

96 56 54 46 86 12 23 88 80 43

16 95 18 29 30 53 88 83 64 67

樣例輸出 3

對於 60% 的資料,1≤n,m≤30,答案不超過 1016 ;

對於 100% 的資料,1≤n,m≤80,0≤ai,j≤1000。

思路:有點思維含量的區間dp,與其他模板區間dp不同的是,這個題我們要對每一行進行區間dp處理,並且要高精度w(゚д゚)w

未加高精:

#include

#define ull unsigned long long

#define maxn 105

using

namespace std;

ull a[maxn]

[maxn]

,f[maxn]

[maxn]

;ull p[maxn]

,ans=

0,n,m;

void

work

(ull tmp)}

ans+

=f[1

][m];}

intmain()

p[1]=

2;for(

int i=

2;i<=m;i++

) p[i]

=p[i-1]

*2;for

(int i=

1;i<=n;i++

)work

(i);

//對於每一行進行一次dp

cout<'\n'

;}

加高精:

#include

using

namespace std;

const

int n=85;

const

int l=

105,power=

4,base=

10000

;int n,m,a[n]

;struct bignum

bignum

(int x)

return;}

inline

void

print()

puts(""

);return;}

inline

void

init()

}bin[n]

,dp[n]

[n];

inline

bool

operator

<

(const bignum &p,

const bignum &q)

return0;

}inline bignum max

(bignum p,bignum q)

inline bignum operator+(

const bignum &p,

const bignum &q)

}while

(ans.a[ans.a[0]

+1]) ans.a[0]

++;return ans;

}inline bignum operator*(

const bignum &p,

const bignum &q)}}

while

(!ans.a[ans.a[0]

]) ans.a[0]

--;return ans;

}inline bignum operator*(

const bignum &p,

const

int&q)

}while

(!ans.a[ans.a[0]

]) ans.a[0]

--;return ans;

}inline bignum solve()

}// dp[1][m].print();

return dp[1]

[m];

}int

main()

// puts("");

for(i=

1;i<=n;i++

) ans.

print()

;return0;

}

矩陣取數遊戲

帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的n m的矩陣,矩陣中的每個元素a 均為非負整數。遊戲規則如下 每次取數時須從每行各取走乙個元素,共n個。經過m次後取完矩陣內所有元素 每次取走的各個元素只能是該元素所在行的行首或行尾 每次取數都有乙個得分值,為每行取數的得分之和,每行取數的得分 被取走...

17 11 4 矩陣取數遊戲

描述 帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的n行 m列的矩陣,矩陣中的每個元素aij均為非負整數。遊戲規則如下 1.每次取數時須從每行各取走乙個元素,共n個。m次後取完矩陣所有的元素 2.每次取走的各個元素只能是該元素所在行的行首或行尾 3.每次取數都有乙個得分值,為每行取數的得分之和 每...

矩陣取數遊戲 NOIP

題目描述 description 問題描述 帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的n m 的矩陣,矩陣中的每個元素aij均 為非負整數。遊戲規則如下 1.每次取數時須從每行各取走乙個元素,共n個。m次後取完矩陣所有元素 2.每次取走的各個元素只能是該元素所在行的行首或行尾 3.每次取數都有...