15年蓝桥杯第7题
2016-03-02 18:57
246 查看
题意:
小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
请填写该整数,不要填写任何多余的内容或说明文字。
思路:这么机智的深搜当然不是我想出来的啊。dfs(a, b),a是当前牌的编号,b是小明手里有多少张牌。如果是是只有a 一个参数的dfs,
作为dfs函数局部变量的b就要回溯了。
然后。当b大于13的时候可以剪枝一下。
写完的时候有个Bug,就是什么时候该ans++.。注释部分是开始错误的部分。dfs第一个参数是当前要放的牌的编号,所以应该是当a == 14的时候刚好遍历完所有的牌。
附right代码:
View Code
小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
请填写该整数,不要填写任何多余的内容或说明文字。
思路:这么机智的深搜当然不是我想出来的啊。dfs(a, b),a是当前牌的编号,b是小明手里有多少张牌。如果是是只有a 一个参数的dfs,
作为dfs函数局部变量的b就要回溯了。
然后。当b大于13的时候可以剪枝一下。
写完的时候有个Bug,就是什么时候该ans++.。注释部分是开始错误的部分。dfs第一个参数是当前要放的牌的编号,所以应该是当a == 14的时候刚好遍历完所有的牌。
附right代码:
/* 题意: 小明被劫持到X赌城,被迫与其他3人玩牌。 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢? 请填写该整数,不要填写任何多余的内容或说明文字。 思路:这么机智的深搜当然不是我想出来的啊。dfs(a, b),a是当前牌的编号,b是小明手里有多少张牌。如果是是只有a 一个参数的dfs, 作为dfs函数局部变量的b就要回溯了。 然后。当b大于13的时候可以剪枝一下。 */ #include <stdio.h> #include <string.h> #include <iostream> using namespace std; // 初始化牌是从1到13的。 int ans; void dfs(int a, int b) { if (a == 14) { if (b == 13) { ans++; } return; }/* if (a >= 14) return; // bug if (b == 13) { ans++; return; }*/ for (int i=0; i<=4; ++i) { dfs(a+1, b+i); } } int main() { ans = 0; dfs(1, 0); // 当前牌编号,和小明手里的牌。 printf("%d\n", ans); return 0; }
View Code
相关文章推荐
- 替换空格
- C语言数组
- SPOJ LCS(后缀自动机)
- ZOJ 3603 Draw Something Cheat(模拟)
- 友元成员函数
- java并发编程 Lock
- [异常] Android - Your project contains errors,please fix them before running your application
- ORA-01157: cannot identify/lock data file %s - see DBWR trace file的处理
- 杭电2095
- 构建之法
- P98 图 两色染色
- java并发编程 Lock
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-006-给bean运行时注入值(Environment,Property文件)
- 如何利用Axis2默认口令安全漏洞入侵WebService网站 推荐
- Chrome 中的 JavaScript 断点设置和调试技巧
- Linux平台JDK安装
- HDU 1103.Flo's Restaurant【模拟】【3月2】
- ZOJ 3602 Count the Trees(二叉树)
- Android内存泄漏分析及调试
- cocos2d移植到安卓引入第三方so文件时候编译会删除解决方式