zoukankan      html  css  js  c++  java
  • UVA 1558

    UVA 1558 - Number Game

    题目链接

    题意:20之内的数字,每次能够选一个数字,然后它的倍数,还有其它已选数的倍数组合的数都不能再选,谁先不能选数谁就输了,问赢的方法

    思路:利用dp记忆化去求解,要输出方案就枚举第一步就可以,状态转移过程中,选中一个数字,对应的变化写成一个函数,然后就是普通的博弈问题了,必胜态之后必有必败态,必败态之后全是必胜态

    代码:

    #include <stdio.h>
    #include <string.h>
    
    const int N = 1050005;
    int t, n, w, start, dp[N], ans[25], an;
    
    int getnext(int state, int x) {
    	for (int i = x; i <= 20; i += x) 
     		if (state&(1<<(i - 2)))
       			state ^= (1<<(i - 2));
    	for (int i = 2; i <= 20; i++) {
    		if (state&(1<<(i - 2))) {
    			for (int j = x; i - j >= 2; j += x) {
    				if (!(state&(1<<(i - j - 2)))) {
    					state ^= (1<<(i - 2)); 
    					break;
    				}
       			}
      		}
     	}
     	return state;
    }
    
    int dfs(int state) {
    	if (dp[state] != -1) return dp[state];
    	if (state == 0) return dp[state] = 0;
    	
    	for (int i = 2; i <= 20; i++) {
    		if (state&(1<<(i - 2))) {
    			if (dfs(getnext(state, i)) == 0)
    				return dp[state] = 1;
      		}
     	}
     	return dp[state] = 0;
    }
    
    int main() {
    	int cas = 0;
    	scanf("%d", &t);
    	memset(dp, -1, sizeof(dp));
    	while (t--) {
    		start = 0; an = 0;
    		scanf("%d", &n);
    		for (int i = 0; i < n; i++) {
    			scanf("%d", &w);
    			start |= (1<<(w - 2));
      		}
      		for (int i = 2; i <= 20; i++) {
      			if (start&(1<<(i - 2))) {
      				if (dfs(getnext(start, i)) == 0)
      					ans[an++] = i;
         		}
        	}
        	printf("Scenario #%d:
    ", ++cas);
        	if (an) {
        		printf("The winning moves are:");
        		for (int i = 0; i < an; i++)
        			printf(" %d", ans[i]);
      			printf(".
    ");
         	}
         	else printf("There is no winning move.
    ");
         	printf("
    ");
     	}
    	return 0;
    }


  • 相关阅读:
    SQL 多条件查询
    android实现程序开机自启动
    SendMessage模拟按键所需的虚拟键码
    使用API进行文件读写——CreateFile,ReadFile,WriteFile等
    VB断点拷贝大文件(WIN7系统需要更改某个API函数,具体我也忘了)
    mysql
    webstorm
    ubuntu ftp服务器
    centos ftp 服务器
    nignx
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4062338.html
Copyright © 2011-2022 走看看