p1004 方格取數
p1006 傳紙條
方格取數:
設f(i,j,k,l)為從原點分別走兩條路徑分別到(i,j),(k,l)所取得的和。
狀態轉移方程:f[i][j][k][l]=max+a[i][j]+a[k][l],若(i,j)(k,l)不是同點
若(i,j)(k,l)為同點,f[i][j][k][l]=max+a[i][j]
遞推邊界:f(1,1,1,1)=a[1][1].
邊界之外:f(_,_,_,_)中_含0則狀態值為0.
正確性:若i+j==k+l,則該狀態值是正確的,否則不正確,但正確答案不受影響,因為答案所轉移的狀態都是正確的。
//方格取數遞推
#includeusing namespace std;
int n,a[10][10],d[10][10][10][10];
int max(int a,int b,int c,int d)
int main()
}
} }coutint n,a[10][10],d[10][10][10][10];
int max(int a,int b,int c,int d)
int f(int i,int j,int k,int l)
int main()
+a[i][j]+a[k][l],若(i,j)(k,l)不是同點
若(i,j)(k,l)為同點,f[i][j][k][l]=0.
遞推邊界:f(1,1,1,1)=a[1][1].
邊界之外:f(_,_,_,_)中_含0則狀態值為0.
正確性:若i+j==k+l,則該狀態值是正確的,否則不正確,但正確答案不受影響,因為答案所轉移的狀態都是正確的。
//傳紙條遞推 四維
#includeusing namespace std;
int n,m,a[55][55],d[55][55][55][55];
int max(int a,int b,int c,int d)
void debug()}}
}}int main()
*/for(int l=1;l<=m;l++)
}
} }//debug();
coutint m,n,a[55][55],d[105][55][55];
int max(int a,int b,int c,int d)
int main()
} }cout《程式有很多地方需要注意。開始時自己對四維dp的正確性非常懷疑,只好手+腦分析小資料,說是小,3*3的矩陣有3^4=81中狀態,費了兩天,終於大概想通了一些。
洛谷P1004方格取數( )
題目描述 設有n times nn n的方格圖 n le 9 n 9 我們將其中的某些方格中填入正整數,而其他的方格中則放入數字00。如下圖所示 見樣例 a 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 ...
洛谷 P1004 方格取數
洛谷 p1004 方格取數 設有n n的方格圖 n 9 我們將其中的某些方格中填入正整數,而其他的方格中則放 人數字0。如下圖所示 見樣例 a 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 0 0 0 4...
洛谷P1004 方格取數
一道顯而易見的dp題,因為要走兩次,相當於兩個人一起從起點出發,所以可採取四維陣列儲存,前兩維記錄第乙個人,後兩維記錄第二個人。轉移方程 dp i j k m max dp i 1 j k 1 m max dp i 1 j k m 1 max dp i j 1 k 1 m dp i j 1 k m ...