帥帥經常跟同學玩乙個矩陣取數遊戲:對於乙個給定的n*m的矩陣,矩陣中的每個元素aij均為非負整數。遊戲規則如下:
1.每次取數時須從每行各取走乙個元素,共n個。m次後取完矩陣所有元素;
2.每次取走的各個元素只能是該元素所在行的行首或行尾;
3.每次取數都有乙個得分值,為每行取數的得分之和,每行取數的得分 = 被取走的元素值*2^i,其中i表示第i次取數(從1開始編號);
4.遊戲結束總得分為m次取數得分之和。
帥帥想請你幫忙寫乙個程式,對於任意矩陣,可以求出取數後的最大得分。
輸入格式:
輸入檔案game.in包括n+1行:
第1行為兩個用空格隔開的整數n和m。
第2~n+1行為n*m矩陣,其中每行有m個用單個空格隔開的非負整數。
資料範圍:
60%的資料滿足:1<=n, m<=30,答案不超過10^16
100%的資料滿足:1<=n, m<=80,0<=aij<=1000
輸出格式:
輸出檔案game.out僅包含1行,為乙個整數,即輸入矩陣取數後的最大得分。
輸入樣例#1:
2 31 2 3
3 4 2
輸出樣例#1:
82
noip 2007 提高第三題
1 #include2 #include3 #include4 #include5#define maxn 100
6using
namespace
std;
7struct
bigint
1011 bigint& operator=(const
string s)
17 a[0]=s.size();
18return *this;19
}20 bigint& operator=(const
ints)
27this->a[0]=i;
28return *this;29
}303132
/*bigint& operator=(const bigint &s)
38return *this;39}
*/40
//賦值部分結束
4142
//運算子+
43 bigint operator +(const
bigint b)
51if(c.a[c.a[0]+1]>0
) 52 c.a[0]++;
53return
c;54}55
56//
比較57
/*bool operator <(const bigint b)
63return false;64}
*/65
66bool
operator
<(const
bigint b)
75return
false;76
}77bool
operator >(bigint b)
80};
8182 ostream& operator
<<(ostream&out,const
bigint a)
87 istream& operator>>(istream&in,bigint& a)
9394
intmain()
116}
117 tot=f[1][n]+tot;
118 memset(&a,0,sizeof(a));//
注意&
119 memset(&f,0,sizeof
(f));
120 memset(&q,0,sizeof
(q));
121 memset(&p,0,sizeof
(p));
122}
123 cout124return0;
125 }
注釋部分比較函式不可用,待查
就是乙個struct版的高精度,抄自
洛谷1005 矩陣取數遊戲(dp 高精)
題目描述 description 帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的n m的矩陣,矩陣中的每個元素aij均為非負整數。遊戲規則如下 1.每次取數時須從每行各取走乙個元素,共n個。m次後取完矩陣所有元素 2.每次取走的各個元素只能是該元素所在行的行首或行尾 3.每次取數都有乙個得分值,為...
TYVJ1414(三取方格數)
演算法 dp 與二取方格數類似,設f i,j,k,l 為走了i步 初始為1步 後,第1次取數在j行,第2次取數在k行,第3次取數在l行的最大值。然後就是類似的轉移,注意這裡一共有8種轉移情況,都要考慮到,設j為當前走到的行,加上j行的值,然後去判斷與k,l是否重複,不重複還要加上它們的值。走i步最多...
樹屋階梯(卡特蘭數 高精除低精 高精乘低精)
安徽省選 2012 題目描述 暑假期間,小龍報名了乙個模擬野外生存作戰訓練班來鍛鍊體魄,訓練的第乙個晚上,教官就給他們出了個難題。由於地上露營濕氣重,必須選擇在高處的樹屋露營。小龍分配的樹屋建立在一顆高度為 n 1 尺 n 為正整數 的大樹上,正當他發愁怎麼爬上去的時候,發現旁邊堆滿了一些空心四方鋼...