描述 description
設有n*n的方格圖,我們將其中的某些方格填入正整數,
而其他的方格中放入0。
某人從圖得左上角出發,可以向下走,也可以向右走,直到到達右下角。
在走過的路上,他取走了方格中的數。(取走後方格中數字變為0)
此人從左上角到右下角共走3次,試找出3條路徑,使得取得的數總和最大。
輸入格式 input format
第一行:n (4<=n<=20)
接下來乙個n*n的矩陣,矩陣中每個元素不超過10000,不小於0
輸出格式 output format
一行,表示最大的總和。
樣例輸入 sample input
樣例輸出 sample output
時間限制 time limitation
各個測試點1s
分析:f[i,j,k,l]:=max(f[i-1,j,k,l]),f[i-1,j-1,k,l],f[i-1,j-1,k-1,l],f[i-1,j-1,k,l-1],f[i-1,j-1,k-1,l-1],f[i-1,j,k-1,l],f[i-1,j,k-1,l-1],f[i-1,j,k,l-1]);
加格仔權值的時候注意不要重複加.
code:
1 function max(a,b:longint):longint; begin if a>b then exit(a) else exit(b); end;2 function min(a,b:longint):longint; begin if a3var
4i,j,k,l,tt,n:longint;
5 a:array[0..21,0..21] of
longint;
6 f:array[0..42,0..21,0..21,0..21] of
longint;
7begin
8read(n);
9 for i:=1
to n do
10 for j:=1
to n do
11read(a[i,j]);
12 f[1,1,1,1]:=a[1,1
];13 for i:=1
to n shl 1-1
do14 for j:=1
to min(n,i) do
15 for k:=1
to min(n,i) do
16 for l:=1
to min(n,i) do
17begin
18 tt:=a[j,i-j+1
];19
if (j<>k) then inc(tt,a[k,i-k+1
]);20
if (j<>l) and (k<>l) then inc(tt,a[l,i-l+1
]);21 f[i,j,k,l]:=max(f[i-1,j-1,k,l],f[i-1
,j,k,l]);
22 f[i,j,k,l]:=max(f[i-1,j-1,k-1
,l],f[i,j,k,l]);
23 f[i,j,k,l]:=max(f[i-1,j-1,k,l-1
],f[i,j,k,l]);
24 f[i,j,k,l]:=max(f[i-1,j-1,k-1,l-1
],f[i,j,k,l]);
25 f[i,j,k,l]:=max(f[i-1,j,k-1
,l],f[i,j,k,l]);
26 f[i,j,k,l]:=max(f[i-1,j,k-1,l-1
],f[i,j,k,l]);
27 f[i,j,k,l]:=max(f[i-1,j,k,l-1
],f[i,j,k,l]);
28inc(f[i,j,k,l],tt);
29end;
30 writeln(f[n shl 1-1
,n,n,n]);
31 end.
三取方格數
時間限制 1 sec 記憶體限制 128 mb 設有n n的方格圖,我們將其中的某些方格填入正整數,而其他的方格中放入0。某人從圖得左上角出發,可以向下走,也可以向右走,直到到達右下角。在走過的路上,他取走了方格中的數。取走後方格中數字變為0 此人從左上角到右下角共走3次,試找出3條路徑,使得取得的...
TYVJ1414(三取方格數)
演算法 dp 與二取方格數類似,設f i,j,k,l 為走了i步 初始為1步 後,第1次取數在j行,第2次取數在k行,第3次取數在l行的最大值。然後就是類似的轉移,注意這裡一共有8種轉移情況,都要考慮到,設j為當前走到的行,加上j行的值,然後去判斷與k,l是否重複,不重複還要加上它們的值。走i步最多...
方格取數 1
problem description 給你乙個n n的格仔的棋盤,每個格仔裡面有乙個非負數。從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取的數所在的2個格仔不能相鄰,並且取出的數的和最大。input 包括多個測試例項,每個測試例項包括乙個整數n 和n n個非負數 n 20 ou...