[Gym-102091E] How Many Groups
/*
先将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的更多相关文章
- 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 ...
- gym/102091
https://codeforces.com/gym/102091 2018-2019 ACM-ICPC, Asia Nakhon Pathom Regional Contest A Flying S ...
- iOS: 在iPhone和Apple Watch之间共享数据: App Groups
我们可以在iPhone和Apple Watch间通过app groups来共享数据.方法如下: 首先要在dev center添加一个新的 app group: 接下来创建一个新的single view ...
- [AlwaysOn Availability Groups]AG排查和监控指南
AG排查和监控指南 1. 排查场景 如下表包含了常用排查的场景.根据被分为几个场景类型,比如Configuration,client connectivity,failover和performance ...
- 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 – ...
- 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 ...
- ACM: Gym 101047K Training with Phuket's larvae - 思维题
Gym 101047K Training with Phuket's larvae Time Limit:2000MS Memory Limit:65536KB 64bit IO F ...
- ACM: Gym 101047E Escape from Ayutthaya - BFS
Gym 101047E Escape from Ayutthaya Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I6 ...
- ACM: Gym 101047B Renzo and the palindromic decoration - 手速题
Gym 101047B Renzo and the palindromic decoration Time Limit:2000MS Memory Limit:65536KB 64 ...
- iOS项目groups和folder的区别(组和文件夹)
在引用一个第三方框架的时候,已经拖进去了,但是引用框架里面的文件时,竟然报错说找不到.......查了一下,原来在拖进去时没有注意group和folder的选择! 其实仔细观察一下,不难发现,以gro ...
随机推荐
- 基于【字符】操作的IO接口:Writer、Reader
Reader public class BufferedReaderTest { public static void main(String[] args) throws IOException { ...
- tcp黏包
转载https://www.cnblogs.com/wade-luffy/p/6165671.html 无论是服务端还是客户端,当我们读取或者发送消息的时候,都需要考虑TCP底层的粘包/拆包机制. 回 ...
- 异步Async
1.c#异步介绍 异步必须基于委托,有委托才有异步 新建一个window Form程序MyAsync,添加一个按钮,(name)=btnAsync 后台代码如下: using System;using ...
- HashSet、TreeSet和LinkedHashSet分别基于HashMap、TreeMap和LinkedHashMap
1.如果你需要一个访问快速的Set,你应该使用HashSet: 当你需要一个排序的Set,你应该使用TreeSet: 当你需要记录下插入时的顺序时,你应该使用LinedHashSet. 2.因为Tre ...
- Java中通过脚本引擎调用js函数
import java.io.*; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.scri ...
- Linux系统安全学习笔记(1)-- 文件系统类型
今天看了一个关于Linux系统安全的视频教程,这个教程有很多的知识点,我会分几篇博文将我的笔记分享出来. 首先是关于Linux文件系统类型的一些知识,Linux有四种常见的文件系统类型(网上大多数是3 ...
- cartographer 最新版安装测试
在官网的基础上稍加修改,但保证代码都是最新的 我的系统配置: Debian9 strech, ROS lunar 该方法对 ubuntu 系列操作系统以及其他ROS版本同样适用. 1. 安装依赖库 ...
- 十分钟入门 Less
这篇文章来自 Danny Markov, 是我最喜欢的博主之一,实际上我最近翻译的一些文章全是出自他手.在查看本文之前你也可以 查看原文. 我们都知道写 CSS 代码是有些枯燥无味的,尤其是面对那些成 ...
- Pytorch tutorial 之Transfer Learning
引自官方: Transfer Learning tutorial Ng在Deeplearning.ai中讲过迁移学习适用于任务A.B有相同输入.任务B比任务A有更少的数据.A任务的低级特征有助于任务 ...
- python下载mp4 同步和异步下载支持断点续下
Range 用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式: Range:(unit=first byte pos)-[last byte pos] Range 头部的格式有以下几种 ...