/*
先将a数组从小到大排序
dp[i][j][k]表示到以第i个数为结尾的,且第i个数改了j次,第i个数改动值为k-1的集合最大值
ans是dp过程中的最大集合大小
状态转移:
首先是到i改动为0次的情况:
如果a[i]-a[i-1]<=2,dp[i][0][1]=dp[i-1][0][1]+1
否则dp[i][0][1]=1
然后是j:1->2
k:0->2
先给定初始状态值 dp[i][j][k]=1
然后是枚举i-1的所有修改状态l:0->2
ai是a[i]修改后的值,aj是a[i-1]修改后的值
这里的状态转移分两种,
一种是第i个数不修改,dp[i][j][1]直接由dp[i-1][j][l]转移得到
二种是第i个数修改,dp[i][j][0|2]有dp[i-1][j-1][l]转移得到
dp过程中用不断更新ans
注意要使冗余状态不会对结果产生影响:冗余状态的初始值必须为0,这样从冗余态推导到可行态才会变成1
注意冗余态不要被赋初值为1即可
所以一开始不可以将dp数组初始化为0 */
#include<bits/stdc++.h>
using namespace std;
#define maxn 105 int n,a[maxn],dp[maxn][][]; int main(){
int t;
cin>>t;
for(int tt=;tt<=t;tt++){
cin>>n;
for(int i=;i<=n;i++)cin>>a[i];
sort(a+,a++n);
int ans=;
dp[][][]=dp[][][]=dp[][][]=;
/*for(int i=2;i<=n;i++)
for(int j=0;j<=2;j++)
for(int k=0;k<=2;k++)
dp[i][j][k]=1;
*/
for(int i=;i<=n;i++){
for(int j=;j<=;j++){
if(j==){//到i一次也没有改的情况
if(a[i]-a[i-]<=)
dp[i][][]=dp[i-][][]+;
else dp[i][][]=;
continue;
}
//剩下的是有改动的情况
for(int k=;k<=;k++){
dp[i][j][k]=;
for(int l=;l<=;l++){
int ai=a[i]-k+,aj=a[i-]-l+;//两个数改动后的值
//不改动a[i]的情况
if(k==){//这里不会出现冗余态:转移必定合法
if(a[i]-aj<=)
dp[i][j][]=max(dp[i][j][],dp[i-][j][l]+);//注意:如果从不存在的状态推过来,就是0+1的形式
continue;
}
//改动a[i]的情况:这里会出现冗余态,dp[i-1][0][0|2]的状态是不存在的
if(ai-aj<=)
dp[i][j][k]=max(dp[i][j][k],dp[i-][j-][l]+);
}
}
}
for(int j=;j<=;j++)
for(int k=;k<=;k++)
ans=max(ans,dp[i][j][k]);
}
printf("Case %d: %d\n",tt,ans);
}
}

[Gym-102091E] How Many Groups的更多相关文章

  1. Gym 101775A - Chat Group - [简单数学题][2017 EC-Final Problem A]

    题目链接:http://codeforces.com/gym/101775/problem/A It is said that a dormitory with 6 persons has 7 cha ...

  2. gym/102091

    https://codeforces.com/gym/102091 2018-2019 ACM-ICPC, Asia Nakhon Pathom Regional Contest A Flying S ...

  3. iOS: 在iPhone和Apple Watch之间共享数据: App Groups

    我们可以在iPhone和Apple Watch间通过app groups来共享数据.方法如下: 首先要在dev center添加一个新的 app group: 接下来创建一个新的single view ...

  4. [AlwaysOn Availability Groups]AG排查和监控指南

    AG排查和监控指南 1. 排查场景 如下表包含了常用排查的场景.根据被分为几个场景类型,比如Configuration,client connectivity,failover和performance ...

  5. Authorization in Cloud Applications using AD Groups

    If you're a developer of a SaaS application that allows business users to create and share content – ...

  6. ACM: Gym 101047M Removing coins in Kem Kadrãn - 暴力

     Gym 101047M Removing coins in Kem Kadrãn Time Limit:2000MS     Memory Limit:65536KB     64bit IO Fo ...

  7. ACM: Gym 101047K Training with Phuket's larvae - 思维题

     Gym 101047K Training with Phuket's larvae Time Limit:2000MS     Memory Limit:65536KB     64bit IO F ...

  8. ACM: Gym 101047E Escape from Ayutthaya - BFS

    Gym 101047E Escape from Ayutthaya Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I6 ...

  9. ACM: Gym 101047B Renzo and the palindromic decoration - 手速题

     Gym 101047B  Renzo and the palindromic decoration Time Limit:2000MS     Memory Limit:65536KB     64 ...

  10. iOS项目groups和folder的区别(组和文件夹)

    在引用一个第三方框架的时候,已经拖进去了,但是引用框架里面的文件时,竟然报错说找不到.......查了一下,原来在拖进去时没有注意group和folder的选择! 其实仔细观察一下,不难发现,以gro ...

随机推荐

  1. 第一章 Android系统的编译和移植实例

    第一章 Android系统的编译和移植实例 这一章节主要介绍了Android系统的编译和移植技术,作为建立在Linux内核的基础上的Android操作系统,它的编译和移植不论在过程还是技术方面都和嵌入 ...

  2. 实现Comet(服务器推送)的两种方式:长轮询和http流

    Comet 是一种高级的Ajax技术,实现了服务器向页面实时推送数据的技术,应用场景有体育比赛比分和股票报价等. 实现Comet有两种方式:长轮询与http流 长轮询是短轮询的翻版,短轮询的方式是:页 ...

  3. springboot整合JSP以及发布项目到独立的tomcat中与打成jar包使用

    之前研究了springboot整合freemarker与thymeleaf的使用.也研究了springboot发布到独立的tomcat的使用以及使用自带的tomcat打成jar包的使用,下面研究集成J ...

  4. thinkpad e系列 装win7过程

    电脑买回来时是win8系统,但是卡顿的厉害,装成win7,win8装win7流程还是比较复杂,后来又装成xp,现在又改成win7,记录一下装win7 的过程 我是用光盘安装的系统 第一步:进入boss ...

  5. 关于Oracle数据库后台进程

    为了最大限度地提高性能并适应许多用户,多进程Oracle数据库系统使用后台进程.后台进程将合并功能,否则这些功能将由运行于每个用户进程的多个数据库程序处理.后台进程异步执行I / O并监视其他Orac ...

  6. [Kubernetes]安装和配置kubectl

    安装kubectl 安装kubectl比较简单,几条命令即可(#后面为注释内容): #下载最新版本: curl -LO https://storage.googleapis.com/kubernete ...

  7. 【ARTS】01_13_左耳听风-20190204~20190210

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  8. Go语言程序开发初涉

    由于工作原因,现在开始学习Go语言.这也是本人第一篇关于Go的博客.本文将通过一些基本概念的说明和实际案例,使得大家能快速对Go程序的开发有个了解. 一. Go的安装 :     在 https:// ...

  9. curl的http上传文件代码

    int http_post_file(const char *url, const char *user, const char *pwd, const char *filename){    ass ...

  10. shell中的dd命令使用详解

    一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. ...