hdu6188 Duizi and Shunzi (贪心或者dp)
题意
有n张牌,第i张牌上的数字是a[i]。我们定义 两张数字是一样的牌 为对子。我们定义 三张数字连续的牌 为顺子。我们想把这n张牌组成尽可能多的顺子和对子。请计算并输出能组成的最多的顺子和对子的数量。
分析
我是傻逼我是傻逼我是傻逼!重要的事情说三遍!!
这是一道贪心,而且是并不是很复杂的贪心,但是我在场上坚定的认为他是个dp然后连写带调两个小时才过掉它!
结束后我在网上查了一下,果然只有我这么傻逼,但是我还是想把这个奇怪的dp思路写下来···
我们定义f[i]为前i张牌中对子和顺子最多的数量,sum[i]为前i张牌里面和牌i相同的牌的数量(因为是排过序的,所以一定是i前面连续的几张)
如果i和前面和i相同的几张牌全部组成对子,那么f[i]=f[i-sum[i]]+sum[i]/2;
如果i和前面和i相同的几张牌想拿出一部分来和前面的组成顺子,剩下的组成对子,那么
f[i]=max(f[i],j+(sum[i]-j)/2+f[i-sum[i]-sum[i-sum[i]]-j]+(sum[i-sum[i]]-j)/2);其中j是想用来组成的顺子数。
真鸡儿麻烦哇!!!
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream> using namespace std;
const int maxn=+;
const int INF=; int n;
long long a[maxn];
long long f[maxn];
long long sum[maxn];
int main(){
while(scanf("%d",&n)!=EOF){
memset(f,,sizeof(f));
for(int i=;i<=n;i++)
scanf("%lld",&a[i]);
sort(a+,a++n);
memset(sum,,sizeof(sum));
for(int i=;i<=n;i++){
if(a[i]!=a[i-])
sum[i]=;
else
sum[i]=sum[i-]+;
}
f[]=f[]=;
if(sum[]>=)f[]=;
else f[]=;
for(int i=;i<=n;i++){
// f[i]=f[i-1];
int M;
f[i]=f[i-sum[i]]+sum[i]/; if(i-sum[i]>=&&i-sum[i]-sum[i-sum[i]-sum[i-sum[i]]]>=){
if(a[i]==a[i-sum[i]]+&&a[i]==a[i-sum[i]-sum[i-sum[i]]]+)
M=min(min(sum[i-sum[i]],sum[i-sum[i]-sum[i-sum[i]]]),sum[i]);
else M=;
// cout<<i<<" "<<M<<endl;
// f[i]=f[i-sum[i]]+sum[i]/2;
//cout<<i<<" "<<M<<endl;
// cout<<i<<" "<<M<<endl;
for(int j=;j<=M;j++){
//f[i]=max(f[i],j+(sum[i]-j)/2+f[i-sum[i]-sum[i-sum[i]-sum[i-sum[i]]]]+(sum[i-sum[i]]-j)/2);
//f[i]=max(f[i],j+f[i-sum[i]-sum[i-sum[i]-sum[i-sum[i]]]]);
f[i]=max(f[i],j+(sum[i]-j)/+f[i-sum[i]-sum[i-sum[i]]-j]+(sum[i-sum[i]]-j)/);
}
}
}
printf("%lld\n",f[n]);
/*for(int i=1;i<=n;i++){
printf("%d %d\n",i,f[i]);
}*/
//printf("%d %d",(sum[6-sum[6]]-1)/2,f[(6-sum[6]-sum[6-sum[6]-sum[6-sum[6]]])]+1);
} return ;
}
如果有谁也是这么做的一定要告诉我···难道只有我这么想吗··难受··
hdu6188 Duizi and Shunzi (贪心或者dp)的更多相关文章
- HDU 6188 Duizi and Shunzi 贪心
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6188 题意:给了n个数,然后现在问我们最多构成多少个对子和顺子,其中对子是2个相同的牌,顺子是3个连续 ...
- 【hdu6188】Duizi and Shunzi(贪心)
2017ACM/ICPC广西邀请赛 重现赛1007 Duizi and Shunzi 题意 有n张牌,问你最多能组成多少对子+顺子?一个牌只能用在一个顺子或者对子中. 题解 本来想写dp的,不会..小 ...
- Duizi and Shunzi HDU - 6188 (贪心)2017 广西ACM/ICPC
Duizi and Shunzi Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 2017ACM/ICPC广西邀请赛 1007 Duizi and Shunzi
Duizi and Shunzi Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- ALGO-13_蓝桥杯_算法训练_拦截导弹(贪心,DP)
问题描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
- 【bzoj4922】[Lydsy六月月赛]Karp-de-Chant Number 贪心+背包dp
题目描述 给出 $n$ 个括号序列,从中选出任意个并将它们按照任意顺序连接起来,求以这种方式得到匹配括号序列的最大长度. 输入 第一行包含一个正整数n(1<=n<=300),表示括号序列的 ...
- 【贪心优化dp决策】bzoj1571: [Usaco2009 Open]滑雪课Ski
还有贪心优化dp决策的操作…… Description Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里 ...
- bzoj 1907: 树的路径覆盖【贪心+树形dp】
我是在在做网络流最小路径覆盖的时候找到这道题的 然后发现是个贪心+树形dp \( f[i] \)表示在\( i \)为根的子树中最少有几条链,\( v[i] \) 表示在\( i \)为根的子树中\( ...
- Duizi and Shunzi HDU
Duizi and Shunzi Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
随机推荐
- UVALive 6163(暴力枚举)
这道题我的做法就是枚举这四个数的所有排列所有运算所有计算顺序. 略有考验代码能力,不能漏掉情况,注意模块化的思想,一些功能写成函数调试的时候结构清晰好分析. 比赛时没有AC是对next_permuta ...
- linux rsync-文件同步和数据传输工具
一.rsync的概述 rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync.rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync” ...
- vc++6 Platform SDK February 2003
vc++6.0 sp6 ftp://ejiasoft:softejia@ejia2.tust.edu.cn/else/VC++.6.0.with.SP6.ISO MSDN http://ftp.sds ...
- [转载] PHP升级导致系统负载过高问题分析
原文:http://chuansongme.com/n/797172 背景 据XX部门兄弟反应, 其在将PHP从5.3.8 升级到5.5.13 时, 开始运行正常, 运行一段时间后, 系统负载变高,达 ...
- mysql基础认识1
一.配置文件 服务端和客户端的字符编码不一样时,可能会导致乱码显示等情况,为了统一两端的字符编码,可以通过配置文件进行实现,当然譬如登录账户等信息也可以进行配置,在启动mysql服务端时会自动读取配置 ...
- Java进阶知识点7:不要只会写synchronized - JDK十大并发编程组件总结
一.背景 提到Java中的并发编程,首先想到的便是使用synchronized代码块,保证代码块在并发环境下有序执行,从而避免冲突.如果涉及多线程间通信,可以再在synchronized代码块中使用w ...
- HDU - 233 Matrix
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=5015 解题思路:一看到题目,感觉是杨辉三角形,然后用组合数学做,不过没想出来怎么做,后来看数据+递推思 ...
- ActionContext介绍(在Struts2中)
一种属性的有序序列,它们为驻留在环境内的对象定义环境.在对象的激活过程中创建上下文,对象被配置为要求某些自动服务,如同步.事务.实时激活.安全性等等.多个对象可以存留在一个上下文内.也有根据上下文理解 ...
- 《Troubleshooting SQL Server》读书笔记-内存管理
自调整的数据库引擎(Self-tuning Database Engine) 长期以来,微软都致力于自调整(Self-Tuning)的SQL Server数据库引擎,用以降低产品的总拥有成本.从SQL ...
- erlang的tcp服务器模板
改来改去,最后放github了,贴的也累,蛋疼 还有一个tcp批量客户端的,也一起了 大概思路是 混合模式 使用erlang:send_after添加recv的超时处理 send在socket的opt ...