题目2267:蓝桥杯2016年第七届真题-取球博弈
#includeiostream#includealgorithmusing namespace std;int n[5], vis[1000][2][2];int dfs(int x, int f, int s) {if(vis[x][f%2][s%2] ! 2) {return vis[x][f%2][s%2];}if(x n[1]) { // 不能取球了if((f%2 1) (s%2 0)) return 1;else if((f%2 0) (s%2 1)) return -1;else return 0;}int res;bool ping false; // 记录是否有平局可能for(int i 1; i 3; i) {if(x - n[i] 0) {res dfs(x - n[i], s, f n[i]);if(res -1) { // 对手输我赢vis[x][f%2][s%2] 1;return 1;}if(res 0) { // 有平局可能ping true;}}}if(ping) { // 没有必胜但有平局vis[x][f%2][s%2] 0;return 0;}// 所有选择都导致对手赢vis[x][f%2][s%2] -1;return -1;}int main() {cin n[1] n[2] n[3];sort(n1, n4);//排序范围是 n[1]、n[2]、n[3]for(int i 1; i 5; i) {int x;cin x;// 初始化vis数组for(int j 0; j x; j) {vis[j][0][0] vis[j][0][1] vis[j][1][0] vis[j][1][1] 2;}int ans dfs(x, 0, 0);if(ans 1) cout ;else if(ans 0) cout 0 ;else cout - ;}return 0;}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2412493.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!