p1005 矩陣取數遊戲
區間dp,憨貪心可以過兩個點,
f[l][r]表示l,r這一段都選完的取得的最大得分
f[l][r]=max(f[1+l][r]+a[l],f[l][r-1]+a[r])*2
越靠中間,乘的2越多,列舉區間長度,和左右端點
答案是f[1][m]
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8view code#define inf 2147483647
9#define for(i,a,b) for(register __int128 i=a;i<=b;i++)
10#define p(a) putchar(a)
11#define g() getchar()
12//
by war
13//
2017.10.19
14using
namespace
std;
15__int128 n,m;
16 __int128 a[100
];17 __int128 f[110][110
];18
__int128 max;
19__int128 ans;
20void
in(__int128 &x)
2130
while(c<='
9'&&c>='
0')x=x*10+c-'
0',c=g();
31 x*=y;32}
33void
o(__int128 x)
3440
if(x>9)o(x/10
);41 p(x%10+'0'
);42}43
intmain()
4458
o(ans);
59return0;
60 }
P1005 矩陣取數遊戲
帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的n mn times mn m的矩陣,矩陣中的每個元素ai,ja ai,j 均為非負整數。遊戲規則如下 每次取數時須從每行各取走乙個元素,共nnn個。經過mmm次後取完矩陣內所有元素 每次取走的各個元素只能是該元素所在行的行首或行尾 每次取數都有乙個得...
P1005 矩陣取數
看完題可能第一時間並沒有清晰的思路。讓我們一步一步的來考慮這道題目。題目中描述操作為每次從所有的行中選取,這樣做有些麻煩。仔細思考一下可以發現行與行之間互不干涉,所以我們可以對每行操作到底,最後統計答案。每行怎麼選取當然難不倒聰明的oier了,設f i j 表示某行從第i位到第j位的最優答案。轉移如...
洛谷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...