還記得馬攔過河卒嗎?如果把馬去掉,那就是一題標準的從左上角走到右下角得到最大值的方法
f[i][j]=max(f[i-1][j],f[i][j-1])+a[i][j]
現在要取三次,可以看做有三個人同時從左上角走向右下角,取走路上的值(每個格仔只能取一次)
所以說現在的狀態不能用f[i][j]來表示了
可以用f[x1][y1][x2][y2][x3][y3]表示現在三個人的狀態((x1,y1),(x2,y2),(x3,y3)分別是三人座標)
考慮到三個人是同時走的,所以在每一步,x1+y1=x2+y2=x3+y3
所以可以用f[step][x1][x2][x3]表示三人的狀態,step=x1+y1=x2+y2=x3+y3,可以算出y1,y2,y3
於是我們得到了超長的動態轉移方程
f[step][x1][x2][x2]=max(f[step-1][x1][x2][x3],f[step-1][x1-1][x2][x3],f[step-1][x1][x2-1][x3],f[step-1][x1][x2][x3-1],f[step-1][x1-1][x2-1][x3],f[step-1][x1-1][x2][x3-1],f[step-1][x1][x2-1][x3-1],f[step-1][x1-1][x2-1][x3-1])+a[i][step-i+1]+a[j][step-j+1]+a[k][step-k+1];
我的程式
#include #include#include
int f[50][30][30][30
];int a[30][30
];int
n,m;
int max(int a,int
b)int min(int a,int
b)int getmax(int step,int x1,int x2,int
x3)void pick(int
step)
}int
main()
VIJOS 1143 三方格取數
jerryzhou同學經常改編習題給自己做。這天,他又改編了一題。設有n n的方格圖,我們將其中的某些方格填入正整數,而其他的方格中放入0。某人從圖得左上角出發,可以向下走,也可以向右走,直到到達右下角。在走過的路上,他取走了方格中的數。取走後方格中數字變為0 此人從左上角到右下角共走3次,試找出3...
A 取石子遊戲(解題報告)
a 取石子遊戲 time limit 1000msmemory limit 10000kb64bit io format i64d i64u submit status description 有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意...
取石子遊戲解題報告
有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子 二是可以在兩堆中同時取走相同數量的石子。最後把石子全部取完者為勝者。現在給出初始的兩堆石子的數目,如果輪到你先取,假設雙方都採取最好的策略,問最後你是勝者還是敗者。in...