noip2007矩陣取數遊戲 2008.11.5
注意:比大小位數不相同時,取位數大的數大;當位數相同時,要從最高位開始比較,相同,則往下比,不相同,則大的數就大。(我剛開始,弄成了從最低位開始比較,故,wa了
20多分鐘)
小結:這道題,我打了不下
5遍,一定要先想好,在紙上把每個細節都確定了,並確定這是最好的演算法,最好的資料結構,在開始敲程式,敲總是很快的,不要擔心,但一定在敲之前,保證正確!
program game;
const fin='game.in';fout='game.out';
maxn=80;
p=10000000;p1=7;
type
arr=array[0..50]of longint;
var f:array[1..maxn,1..maxn]of arr;
f1,f2:text;
k,n,m,i,j:longint;
max:arr;
a:array[1..maxn,1..maxn]of longint;
procedure init;
begin
assign(f1,fin);reset(f1);
assign(f2,fout);rewrite(f2);
read(f1,n,m);
for i:=1 to n do
for j:=1 to m do read(f1,a[i,j]);
fillchar(max,sizeof(max),0);
end;
procedure add(a1,b1:arr;var s:arr);
var i,j,l:longint;
begin
fillchar(s,sizeof(s),0);
if a1[0]>b1[0] then l:=a1[0] else l:=b1[0];
for i:=1 to l do
begin
s[i]:=a1[i]+b1[i]+s[i];
s[i+1]:=s[i+1]+s[i] div p;
s[i]:=s[i] mod p;
end;
if s[l+1]<>0 then
begin s[l+1]:=s[l+1]+s[l] div p;
s[l]:=s[l] mod p;
inc(l);
end;
s[0]:=l;
end;
function maxin(x1,x2:arr):arr;
var i:longint;
begin
if x1[0]>x2[0] then exit(x1)
else if x1[0]1)do dec(i);
if x1[i]>x2[i] then exit(x1) else exit(x2);
end;
end;
procedure dp;
var w,i,j,k:longint;x1,x2:arr;
begin
for w:=1 to n do
begin
fillchar(f,sizeof(f),0);
for i:=1 to m do
begin
f[i,i,0]:=1;
f[i,i,1]:=a[w,i]*2;
end;
for k:=2 to m do
for i:=1 to m-k+1 do
begin
j:=i+k-1;
fillchar(x1,sizeof(x1),0);
fillchar(x2,sizeof(x2),0);
x1[0]:=1;x1[1]:=a[w,j];
add(f[i,j-1],x1,x1);
x2[0]:=1;x2[1]:=a[w,i];
add(f[i+1,j],x2,x2);
f[i,j]:=maxin(x1,x2);
add(f[i,j],f[i,j],f[i,j]);
end;
add(f[1,m],max,max);
end;
end;
procedure print;
var i,l,j:longint;ch:string;
begin
write(f2,max[max[0]]);
for i:=max[0]-1 downto 1 do
begin
str(max[i],ch);
for j:=1 to p1-length(ch) do
write(f2,0);
write(f2,max[i]);
end;
end;
begin init;
dp;print;
close(f1);
close(f2);
end.
NOIP2007 矩陣取數遊戲
傳送門給定乙個n m的矩陣,在每一行中取m次數,每次取數只能從行首或尾取數,第i次取數的貢獻是 2 i 該點值 操作n行,求最大答案 n,m 80 不難發現行與行之間是完全獨立的,所以單獨處理每一行就好了 考慮區間dp 設 dp i j 表示區間i j的答案最大值 則有 dp i j max num...
NOIP2007 矩陣取數遊戲
鏈結 簡單dp 毒瘤高精 顯然行與行沒有關聯 所以只需要每行處理 考慮dp i,j,k 表示第i次取數,第j行,有k次取的頭的最大分數 直接dp即可 includeusing namespace std define ll int128inline intread while ch 0 ch 9 d...
NOIP2007提高組 矩陣取數遊戲
本題dp 高精度即可。首先我們可以發現它的貢獻只與行有關係,於是就分成n行,每行都做dp,然後將max加起來即可。ps 用高精度實現 上標 include include include define mo 100000 define ll long long using namespace std...