[ZPG TEST 105] 扑克游戏【Huffman】
扑克游戏
(poker)
题目描述:
有一棵无穷大的满二叉树,根为star,其余所有点的权值为点到根的距离,如图:

现在你有一些扑克牌,点数从1到13,你要把这些扑克牌全部放到这个树上:
- 当你把点数为i的扑克牌放在权值为j的点上,那么你会得到i*j的分数。
- 当你把一个扑克牌放在一个节点上,那么你就不能把别的扑克牌放在这个节点以及这个节点的子树上。
你的目标是最小化你的得分。
输入:
文件名为 poker.in
输入第一行为一个数字N,表示你有的扑克牌数;
接下来一行N个数字,数字在1到13之间。
输出:
文件名为 poker.out
一个数字,最小得分。
样例输入:
3
5 10 13
样例输出:
43
样例说明:

数据范围:
30%数据 N<=100
100%数据满足1<=N<=10000.
就这破(水)题暴了我好久时间,其实是一道水题。想到这棵树的每个节点只可能有0个或者2个儿子(这很显然)。这不就是huffman的的特点吗!然而吾并没有往这上面想,其实这道题就是合并果子!想象题目中输入数据的第二行给出的就是N个字符的出现频率,这特么就是huffman!唉,破烂题目毁我一生!
#include <cstdio>
#include <algorithm> const int maxn = ; int n, a[maxn], b[maxn], head1, head2, tail2, ans, t, flag; int main(void) {
freopen("poker.in", "r", stdin);
freopen("poker.out", "w", stdout);
scanf("%d", &n);
for (int i = ; i < n; ++i) {
scanf("%d", a + i);
}
std::sort(a, a + n); for (int i = ; i < n; ++i) {
t = ;
flag = -;
if (head1 + < n && t > a[head1] + a[head1 + ]) {
t = a[head1] + a[head1 + ];
flag = ;
}
if (head1 < n && head2 < tail2 && t > a[head1] + b[head2]) {
t = a[head1] + b[head2];
flag = ;
}
if (head2 + < tail2 && t > b[head2] + b[head2 + ]) {
t = b[head2] + b[head2 + ];
flag = ;
}
if (!flag) {
head1 += ;
}
else if (flag == ) {
++head1;
++head2;
}
else {
head2 += ;
}
b[tail2++] = t;
ans += t;
}
printf("%d\n", ans);
return ;
}
[ZPG TEST 105] 扑克游戏【Huffman】的更多相关文章
- JavaScript案例开发之扑克游戏
随着时代的发展,知识也在日益更新,但是基础知识永远不会过时,它是新时代的基石,更是我们进一步学习的保障,下面带着大家用JavaScript开发一款真正的扑克游戏,和大家一起分享,希望你们能够喜欢:闲话 ...
- 程序日志--ios“考反应扑克游戏”程序
交代一下我做程序的工具:mac os x虚拟机10.9.3 Xcode6 百度^-^ 參考书iPhone30天精通 总结与经验,还有遇到的问题,都在程序 ...
- ICML论文|阿尔法狗CTO讲座: AI如何用新型强化学习玩转围棋扑克游戏
今年8月,Demis Hassabis等人工智能技术先驱们将来到雷锋网“人工智能与机器人创新大会”.在此,我们为大家分享David Silver的论文<不完美信息游戏中的深度强化学习自我对战&g ...
- 【NHOI2018】扑克游戏
[问题描述] 有一种别样“小猫钓鱼”扑克游戏.有 N 张牌,每张牌都有一个花色和点数.游戏的规则:扑克接龙时,若前面有同样花色的牌,你可以将这两张牌连同之间的牌都取走,得到的分值为取走牌点数之和.这里 ...
- JZOJ 1736. 扑克游戏 (Standard IO)
1736. 扑克游戏 (Standard IO) Time Limits: 1000 ms Memory Limits: 128000 KB Description 有一棵无穷大的满二叉树,根为sta ...
- 德州扑克AI WEB版
继续之前的德州扑克话题,上次的DOS界面确实没法看,我女朋友说这是什么鬼.哈哈,估计只有自己能玩了 这两天重构了一下界面,基于web服务器和浏览器来交互. 服务器和客户端之间用websocket通信, ...
- 第一篇代码 嗨翻C语言 21点扑克
/* * 计算牌面点数的程序. * 使用“拉斯难加斯公开许可证”. * 学院21点扑克游戏小组. */#include <stdio.h>#include <stdlib.h& ...
- [swustoj 1088] 德州扑克
德州扑克(1088) 问题描述 德州扑克是一款风靡全球的扑克游戏.德州扑克一共有52张牌,没有王牌.每个玩家分两张牌作为“底牌”,五张由荷官陆续朝上发出的作为公共牌.开始的时候,每个玩家会有两张面朝下 ...
- python实例:解决经典扑克牌游戏 -- 四张牌凑24点 (一)
Hey! Hope you had a great day so far! 今天想和大家讨论的是一道我从这学期cs的期末考试得到灵感的题:Get 24 Poker Game.说到 Get 24 Pok ...
随机推荐
- xml解析工具mashaller javaee自带解析类
1.怎样去掉Marshaller的格式化? : JAXBContext context = JAXBContext.newInstance(Entity.class); Marshaller mars ...
- pycharm查看代码注释的方法,代码编写日志及作者信息等
竟然在边栏有个右键的快捷键.annotate可以查看代码书写日期及作者 鼠标悬停可以看到更加详细的时间等信息 原理应该是利用git blame
- 最新---java多线程下载文件
import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; impo ...
- VB和VB.NET有什么区别
作为VB6.0的后续版本,VB.NET更加稳定,而且完全面向对象.也许你还记得,VB6.0部支持继承.重载和接口,所以不是真正面向对象的.而VB.NET则支持这些面向对象特性.VB6.0有两个薄弱环节 ...
- Asp.net MVC 简单分页 自做简单分页
Asp.net MVC 简单分页: public static string Pager(int page,int pageSize,int total) { ...
- Effective C++学习笔记(Part Two:Item 5-12)
近期最终把effectvie C++细致的阅读了一边,非常惊叹C++的威力与魅力.近期会把近期的读书心得与读书笔记记于此.必备查找使用,假设总结有什么不当之处,欢迎批评指正: 如今仅仅列出框架. ...
- qt之旅-1纯手写Qt界面
通过手写qt代码来认识qt程序的构成,以及特性.设计一个查找对话框.以下是设计过程 1 新建一个empty qt project 2 配置pro文件 HEADERS += \ Find.h QT += ...
- 从CakePHP 1.3升级到2.5
从CakePHP 1.3升级到2.5 摘要:最近把一个CakePHP 1.3的项目升级到了2.x,当然就用最新的版本2.5.3了,结果基本满意.本文记录了升级的过程,包括使用的工具,遇到的问题和相应的 ...
- NHibernate不支持复杂的linq,就一定要用DataTable这么低级吗
有些linq,好不容易写出来,正想扬眉吐屁一番,不料用NHibernate一执行,却报错,说是不支持,我靠. 只好捏着鼻子写一大段sql,交给它.这种直接执行SQL的情况,我看我同事写的,全部都是返回 ...
- TCP Operational Overview and the TCP Finite State Machine (FSM) http://tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF.htm
http://tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF.htm http://tcpipgu ...