洛谷P2668 斗地主(NOIp2015)(BZOJ4325)
来源:互联网 发布:放置江湖网络错误 编辑:程序博客网 时间:2024/05/17 09:34
贪心 DFS
洛谷题目传送门
BZOJ题目传送门
DFS枚举顺子情况,然后剩下的贪心出牌。
详情见注释
有兴趣的小伙伴可以A一A洛谷的数据加强版。(我这个过不了)
代码:
#include<cstdio>#include<cstring>#include<algorithm>#define MAXN 14using namespace std;int t,n,ans;int num[MAXN+5];int sum[MAXN+5];int to[MAXN+5]={0,13,1,2,3,4,5,6,7,8,9,10,11,12};int calc(){ memset(sum,0,sizeof(sum));//sum存是单牌/对子/三张牌/炸弹的数量 for (int i=0;i<=13;i++) sum[num[i]]++; int ret=0; while (sum[4]>0&&sum[2]>1){//炸弹带对子最先,因为出的牌最多,下同 sum[4]--; sum[2]-=2; ret++; } while (sum[4]>0&&sum[1]>1){ sum[4]--; sum[1]-=2; ret++; } while (sum[4]>0&&sum[2]>0){ sum[4]--; sum[2]--; ret++; } while (sum[4]>0&&sum[1]>0){ sum[4]--; sum[1]--; ret++; } while(sum[4]>1){//两个炸弹可以拆成一个炸弹和两个对子,就可以一次出了(不过貌似不卡这个) sum[4]-=2; ret++; } while (sum[3]>0&&sum[2]>0){ sum[3]--; sum[2]--; ret++; } while (sum[3]>0&&sum[1]>0){ sum[3]--; sum[1]--; ret++; } return ret+sum[1]+sum[2]+sum[3]+sum[4];//总和}void dfs(int sum){//DFS搜顺子 if (sum>ans) return;//如果当前次数已经比答案大了就退出 ans=min(ans,sum+calc());//更新答案 for (int i=2;i<=13;i++) for (int j=1;j<=3;j++)//枚举顺子的形式 if (num[i]>=j){ int k=i,p=0; while (num[k]>=j){ p+=j; num[k++]-=j; } k--; while (k>=i){ if (p>=5) dfs(sum+1); num[k--]+=j; p-=j; } }}int main(){ scanf("%d%d",&t,&n); while (t--){ memset(num,0,sizeof(num)); int x; ans=0x7fffffff; for (int i=1;i<=n;i++){ scanf("%d%*d",&x);//%*即跳过不读 num[to[x]]++; } dfs(0); printf("%d\n",ans); }}
阅读全文
0 0
- 洛谷P2668 斗地主(NOIp2015)(BZOJ4325)
- [BZOJ4325][NOIP2015]斗地主(dfs)
- NOIP2015 斗地主 洛谷P2668
- [bzoj4325][NOIP2015]斗地主
- [BZOJ4325]NOIP2015 斗地主
- [bzoj4325]NOIP2015 斗地主
- 洛谷 P2668 [NOIP2015 D1T3] 斗地主
- 【BZOJ4325】【NOIP2015】斗地主 搜索
- 洛谷 P2668 斗地主
- 洛谷 P2668 斗地主
- 洛谷 P2668 斗地主
- 洛谷 P2668 斗地主
- 【BZOJ4325】NOIP2015 斗地主【搜索】【剪枝】
- NOIP2015斗地主(洛谷2668)
- 洛谷P2668 斗地主 贪心+搜索
- P2668 斗地主
- [P2668]斗地主
- 【p2668】斗地主
- crontab快速入门
- switch能否作用在char上,能否作用在byte上,能否作用在string上?
- Nodejs指西 Event Loop Task queue
- Java:学生成绩统计(while语句)
- NIO编程
- 洛谷P2668 斗地主(NOIp2015)(BZOJ4325)
- 校内联考——Contest First 题解
- 多元高斯分布
- PAT乙级1005. 继续(3n+1)猜想 (25)
- table表格行号
- 吝啬的国度
- 动物声音模拟器
- 八(1) 3 -顺序串算法
- 使用wait()和notify()模拟Queue(队列)