洛谷P1512伊甸園日曆遊戲-題解
阿新 • • 發佈:2020-08-12
原題:
思路:
考慮搜尋,顯然有必勝策略
對於能轉移到必勝狀態的,必輸,因為它把必勝狀態給了對方
由此可以用搜索解決
但是DFS麻煩,於是我們換一種策略
類似動規
程式碼:
#include <bits/stdc++.h> using namespace std; int n; int f[2010][13][40]; int mth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int main() { cin >> n; int x,y,z; x=2004; y=11; z=4; while(!(x==1900&&y==1&&z==1)) { if(f[x][y][z]==0) { if(y==1&&z==1) f[x-1][12][31]=1; else if(z==1) { if(x%4==0&&y==3&&x!=1900) f[x][y-1][mth[y-1]+1]=1; else f[x][y-1][mth[y-1]]=1; }else{ f[x][y][z-1]=1; } if (y==1) f[x-1][12][z]=1; else if (x%4==0&&x!=1900&&y==3&&z<=mth[2]+1) f[x][2][z]=1; else if (z<=mth[y-1]) f[x][y-1][z]=1; } if (y==1&&z==1) { x--; y=12; z=31; } else if (z==1) { if (x%4==0&&x!=1900&&y==3) { y=2; z=29; } else { y--; z=mth[y]; } } else z--; } for(int i=1;i<=n;i++) { int x,y,z; cin >> x >> y >> z; if(f[x][y][z]) cout << "YES" << endl; else cout << "NO" << endl; } return 0; }