題目位址——
帥帥經常跟同學玩乙個矩陣取數遊戲:對於乙個給定的 n∗
m 的矩陣,矩陣中的每個元素 ai
j 均為非負整數。
遊戲規則如下:
1. 每次取數時須從每行各取走乙個元素,共
n 個。
m次後取完矩陣所有元素;
2. 每次取走的各個元素只能是該元素所在行的行首或行尾;
3. 每次取數都有乙個得分值,為每行取數的得分之和,每行取數的得分= 被取走的元素值*2i
, 其中 i
表示第
i次取數(從
1 開始編號);
4.遊戲結束總得分為
m 次取數得分之和。
帥帥想請你幫忙寫乙個程式,對於任意矩陣,可以求出取數後的最大得分。
輸出僅包含
1行,為乙個整數,即輸入矩陣取數後的最大得分。
2 360%1 2 3
3 4 2
的資料滿足:
1<=n,
m<=
30 , 答案不超過
1016
100% 的資料滿足:
1<=n,
m<=
80 ,
0<=ai
j<=
1000
首先,我們可以分行處理。
對於每一行,設 fi
,j表示
i 到
j的最大得分。
則可以分成兩種情況:
一:選擇最左端的數字。
二:選擇最右端的數字。 則 f
i,j=
max(
fi,j
−1+n
uml,
j×2m
−(j−
i),f
i+1,
j+nu
ml,i
×2m−
(j−i
))其中,
l 表示當前的行號, nu
mi,j
表示原矩陣中第
i 行第
j列的數字。
#include
#include
#include
#define max(x,y) ((x)>(y)?(x):(y))
#define ll long long
#define mod 10000000
using
namespace
std;
char ss[50];
struct bign
bign(const
int num)
bign operator = (const
int &num)
bign operator = (const
char*str)
return *this;
}bign operator * (const bign &num)
while(!c.s[c.len]&&c.len>1)c.len--;
return c;
}bign operator + (const bign&num)
if(c.s[c.len+1])c.len++;
return c;
}bool
operator > (const bign&num)const
void out()
}};int n,m;
bign ans;
int num[100][100];
bign f[100][100];
bign tmpss=1,tmpss2=2;
bign power(int y)
int main()
ans.out();
return
0;}
矩陣取數遊戲
帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的n m的矩陣,矩陣中的每個元素a 均為非負整數。遊戲規則如下 每次取數時須從每行各取走乙個元素,共n個。經過m次後取完矩陣內所有元素 每次取走的各個元素只能是該元素所在行的行首或行尾 每次取數都有乙個得分值,為每行取數的得分之和,每行取數的得分 被取走...
1574 矩陣取數遊戲
1574 矩陣取數遊戲 時間限制 1000 ms 記憶體限制 524288 kb 提交數 618 通過數 248 題目描述 經常和同學玩乙個矩陣取數遊戲 對於給定的 n m 的矩陣,矩陣中每個元素 aij 均為非負整數。遊戲規則如下 1 每次取數時必須從每行各取走乙個元素,共 n 個,m 次取完所有...
17 11 4 矩陣取數遊戲
描述 帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的n行 m列的矩陣,矩陣中的每個元素aij均為非負整數。遊戲規則如下 1.每次取數時須從每行各取走乙個元素,共n個。m次後取完矩陣所有的元素 2.每次取走的各個元素只能是該元素所在行的行首或行尾 3.每次取數都有乙個得分值,為每行取數的得分之和 每...