試題**
noip2007 提高組
問題描述
帥帥經常跟同學玩乙個矩陣取數遊戲:對於乙個給定的
n*m的矩陣,矩陣中的每個元素
aij均為非負整數。遊戲規則如下:
1. 每次取數時須從每行各取走乙個元素,共
n個。m次後取完矩陣所有元素;
2. 每次取走的各個元素只能是該元素所在行的行首或行尾;
3. 每次取數都有乙個得分值,為每行取數的得分之和,
每行取數的得分 = 被取走的元素值*2i
,其中 i表示第
i次取數(從1開始編號);
4. 遊戲結束總得分為
m次取數得分之和。
帥帥想請你幫忙寫乙個程式,對於任意矩陣,可以求出取數後的最大得分。
輸入格式
輸入包括
n+1行:
第1行為兩個用空格隔開的整數
n和m。
第2~n+1行為
n*m矩陣,其中每行有
m個用單個空格隔開的非負整數。
輸出格式
輸出包含1行,為乙個整數,即輸入矩陣取數後的最大得分。
樣例輸入
2 31 2 3
3 4 2
樣例輸出 82
樣例輸入
1 44 5 0 5
樣例輸出
122樣例輸入
2 10
96 56 54 46 86 12 23 88 80 43
16 95 18 29 30 53 88 83 64 67
樣例輸出
316994
資料規模和約定
60%的資料滿足:1<=
n, m<=30, 答案不超過10
16100%的資料滿足:1<=n, m
<=80, 0<=aij
<=1000。
區間動態規劃:
取走乙個數後,剩下的是乙個區間,並且區間長度越來越小,所以外迴圈可以按區間長度遞增的方式
如下:
for (int j=1;j<=m-1;j++)//區間長度
{ for (int k=1;k<=m-j;k++)//起點
{ int l=k+j;
f[k][l] = max(a[k] + 2 * f[k+1][l], a[l] + 2 * f[k][l-1]);
根據示例2
4 5 0 5
ans=2*f[1][4]
=2*(2*f[1][3]+a[4])
=2*(2*(2*f[1][2]+a[3])+a[4])
=2*(2*(2*(2*f[2][2]+a[1])+a[3])+a[4])
=2*(2*(2*(2*a[2]+a[1])+a[3])+a[4])
// f[j][j]=a[j]
二維圖形,左上角矩陣
P1005 矩陣取數遊戲 區間dp
帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的 m n 的矩陣,矩陣中的每個元素 a 均為非負整數。遊戲規則如下 每次取數時須從每行各取走乙個元素,共n個。經過m次後取完矩陣內所有元素 每次取走的各個元素只能是該元素所在行的行首或行尾 每次取數都有乙個得分值,為每行取數的得分之和,每行取數的得分 ...
1166 矩陣取數遊戲 區間dp 高精度
2007年noip全國聯賽提高組 時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解 問題描述 帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的n m 的矩陣,矩陣中的每個元素aij均 為非負整數。遊戲規則如下 1.每次取數時須從每行各取走乙個元素,共n個。m次後取完矩陣所有元...
NOIP2007 矩陣取數遊戲(區間DP)
傳送門 這道題第一眼看上去可能讓人以為是貪心 不過貪心並不行,因為每次的操作是有2的冪次方的權值的。這樣的話直接每次貪心最小的就目光短淺。所以那我們自然想到了dp。據說這是一道很正常的區間dp?區間dp的基本思想,就是先處理出小區間的最優解,再由多個小區間合併成乙個大區間。不過這道題的想法略微有些不...