https://atcoder.jp/contests/abc201
D - Game in Momotetsu World
由題意可得為一道博弈論題
透過思考可得為博弈DP
其中透過分析可得
所以每次狀態轉移都得轉換視角
當兩個人無限聰明時
轉換視角後 看到的就是相對於上一個人落後的大小
所以取f[i-1][j]=min(-f[i][j]-a[i][j])
f[i][j-1]=min(-f[i][j]-a[i][j])其中要從後往前dp
如果從前往後dp會受到後繼性影響
點選檢視程式碼
int a[2005][2005],dp[2005][2005];
void solve(){
int h,w;cin>>h>>w;
for(int i=1;i<=h;i++)for(int j=1;j<=w;j++){
char ch;cin>>ch;
a[i][j]=ch=='+'?1:0;
dp[i][j]=1e18;
}
dp[h][w]=0;
for(int i=h;i>=1;i--)for(int j=w;j>=1;j--){
dp[i-1][j]=min(-(dp[i][j]+a[i][j]),dp[i-1][j]);
dp[i][j-1]=min(-(dp[i][j]+a[i][j]),dp[i][j-1]);
}
if(dp[1][1] > 0)
puts("Aoki");
if(dp[1][1] < 0)
puts("Takahashi");
if(dp[1][1] == 0)
puts("Draw");
}