题意

有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)的更多相关文章

  1. HDU 6188 Duizi and Shunzi 贪心

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6188 题意:给了n个数,然后现在问我们最多构成多少个对子和顺子,其中对子是2个相同的牌,顺子是3个连续 ...

  2. 【hdu6188】Duizi and Shunzi(贪心)

    2017ACM/ICPC广西邀请赛 重现赛1007 Duizi and Shunzi 题意 有n张牌,问你最多能组成多少对子+顺子?一个牌只能用在一个顺子或者对子中. 题解 本来想写dp的,不会..小 ...

  3. 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) ...

  4. 2017ACM/ICPC广西邀请赛 1007 Duizi and Shunzi

    Duizi and Shunzi Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. ALGO-13_蓝桥杯_算法训练_拦截导弹(贪心,DP)

    问题描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...

  6. 【bzoj4922】[Lydsy六月月赛]Karp-de-Chant Number 贪心+背包dp

    题目描述 给出 $n$ 个括号序列,从中选出任意个并将它们按照任意顺序连接起来,求以这种方式得到匹配括号序列的最大长度. 输入 第一行包含一个正整数n(1<=n<=300),表示括号序列的 ...

  7. 【贪心优化dp决策】bzoj1571: [Usaco2009 Open]滑雪课Ski

    还有贪心优化dp决策的操作…… Description Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里 ...

  8. bzoj 1907: 树的路径覆盖【贪心+树形dp】

    我是在在做网络流最小路径覆盖的时候找到这道题的 然后发现是个贪心+树形dp \( f[i] \)表示在\( i \)为根的子树中最少有几条链,\( v[i] \) 表示在\( i \)为根的子树中\( ...

  9. Duizi and Shunzi HDU

    Duizi and Shunzi Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

随机推荐

  1. 开源一款远程控制软件 —— pcshare

    这里开放一款远程控制软件的源码--pcshare,该软件分为被控制端和控制端.部分界面如下: 控制端通过寄生在被控制端的后台程序来实现控制,可以对被控制台进行文件管理.屏幕监控.键盘监控.监控管理.查 ...

  2. 测试中认识 sqlite

    1.SQLite,是一款轻型的数据库:简单, 轻松的API 单词速记中单词离线包也用到sqlite 百度了一下,基本的使用语句: .help .quit sqlite3 testDB.db 在当前目录 ...

  3. RIPng 知识要点

    RIPng  --------------------------------------------------------- UDP:521 多播地址:FF02::9 -------------- ...

  4. Jar包进行反编译,修改后重新打包

    在学习和开发JAVA项目中,我们经常会用到第三方提供的一些jar.使用这些第三方工具包,可以提高我们开发的效率,缩短开发的时间.有的第三方工具,提供具体的使用说明和源代码,有时有的却不提供源代码,使用 ...

  5. avalon 总线时序关系理解

    对于读,等待时间指的是从端口捕获数据的时间相对于read信号的延时 建立时间指的是read信号相对于chipselect和addr的延时时间 对于写,等待时间指的是相对于非等待情况下各个信号的延时时间 ...

  6. 好用的python第三方库

    参考连接:http://python.jobbole.com/84464/ https://www.zhihu.com/question/20501628 python每日技术更新:https://g ...

  7. AES前后加密算法代码

    首先下载aes.js加密工具类: 本文采用的是 AES/ECB/PKCS5Padding的加密方式进行加密的: js加密写法如下: <!DOCTYPE html> <html lan ...

  8. zabbix 执行自定义key脚本超时

    报错如下: [root@master scripts]# /usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k web.site.code[www.baid ...

  9. 在rebar发布的项目中添加监视工具

    默认使用rebar创建的项目没法使用observer,可以如下操作 修改app.src {application, tcp_server, [ {description, ""}, ...

  10. (转)C# Socket简单例子(服务器与客户端通信)

    本文转载自:http://blog.csdn.net/andrew_wx/article/details/6629721 这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信. 注意:此 ...