青草游戏
博弈dp
public static void main(String[] args) { int n=10; int[] dp=new int[n+1];//dp[i]当前个数为i时等于1表示niu获胜,0表示yang获胜 for(int i=1;i<=n;i++) { int flag=0; for(int j=1;j<=i;j*=4) { if(dp[i-j]==0) flag=1; } dp[i]=flag; } System.out.println(dp[n]);
}
我们发现博弈只与前5有关,我们把时间复杂度缩小到常数范围
public static void main(String[] args) { int[] dp=new int[5];//dp[i]当前个数为i时等于1表示niu获胜,0表示yang获胜 for(int i=1;i<5;i++) { int flag=0; for(int j=1;j<=i;j*=4) { if(dp[i-j]==0) flag=1; } dp[i]=flag; } Scanner scan= new Scanner(System.in); int x=scan.nextInt(); while(scan.hasNext()) { int n=scan.nextInt(); System.out.println(dp[n%5]); } }
本文来自博客园,作者:LeeJuly,转载请注明原文链接:https://www.cnblogs.com/peterleee/p/10868766.html

浙公网安备 33010602011771号