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) ...
随机推荐
- 20165222 实验一java开发环境的熟悉
实验内容及步骤 实验一 Java开发环境的熟悉-1 1 建立“自己学号exp1”的目录 2 在“自己学号exp1”目录下建立src,bin等目录 3 javac,java的执行在“自己学号exp1”目 ...
- mybatis排序
排序的时候#和$的分别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by ...
- 51nod 1362 搬箱子——[ 推式子+组合数计算方法 ] [ 拉格朗日插值 ]
题目:http://www.51nod.com/Challenge/Problem.html#!#problemId=1362 方法一: 设 a 是向下走的步数. b 是向右下走的步数. c 是向下走 ...
- vs2005中microsoft ado data control 6.0控件问题
在vs2005中是没有这个控件的,需要注册,步骤如下: 1. 先到C:\WINDOWS\system32目录下看看你的系统里是否已经有了MSADODC.ocx和MSDATGRD.ocx这两个文件(多半 ...
- SpringCloud子项目
Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...
- Jmeter录制HTTPS 补充
Jmeter有录制功能,录制HTTPs需要增加一个证书配置,录制步骤如下: 1.打开jmeter,添加线程组.线程组右键,逻辑控制器>录制控制器 工作台 右键 非测试元件 >HTTP代理服 ...
- Linux性能监测:内存篇
在操作系统里,虚拟内存被分成页,在 x86 系统上每个页大小是 4KB.Linux 内核读写虚拟内存是以 “页” 为单位操作的,把内存转移到硬盘交换空间(SWAP)和从交换空间读取到内存的时候都是按页 ...
- Linux性能监测:监测目的与工具介绍
性能监测是系统优化过程中重要的一环,如果没有监测.不清楚性能瓶颈在哪里,优化什么呢.怎么优化呢?所以找到性能瓶颈是性能监测的目的,也是系统优化的关键.本文对Linux性能监测的应用类型.底线和监测工具 ...
- infos
C++文件流 iostream 提供了cin cout 分别用于从标准输入读取流和向标准输出写入流cout 标准输出 屏幕 输出写入fstream文件流 cin 从标准输入读取cout 向标准输入写入 ...
- 完美解决HALCON C#编程目标平台冲突问题
完美解决HALCON C#编程目标平台冲突问题 楼主# 更多发布于:2016-11-23 10:06 背景: 目标机器工控机使用11.0.1 32位Halcon 原因你懂的.开发环境Win ...