题意:

定义:设M为数组a的子集(元素可以重复),将M中的元素排序,若排序后的相邻两元素相差不超过2,则M为a中的一个块,块的大小为块中的元素个数

给出长度为n的数组a,1<=n<=200,1<=ai<=200,可以任选最多两个数(可以不选),将它们值+1或-1。问如何修改可以使得数组中最大的块的大小最大。

思路

想到是否可以DP:第一维是数组中的下标;由于最多能修改两次,要有一维记录当前状态的修改次数;为了能递推,还要一维记录当前状态的修改值是+1还是-1。

因此定义\(dp[i][j][k]\):对于排序后的数组,前i个数总共修改了j次,将第i个数修改位a[i]+k-1(如果没有修改,k=1),前i数最大块的大小。

P.S. T=1e5,n*T=1e7,需要快读

#include <bits/stdc++.h>
using namespace std;
const int maxn=105;
int a[maxn];
int dp[maxn][3][3];//dp[i][j][k]:到第i个数为止总共修改了j次,将a[i]+k-1后,前i个数的最大集合大小
inline int read() {
int ret = 0, f = 1;
char ch = getchar();
while (ch<'0' || ch > '9') {
if (ch == '-')
f = -f;
ch = getchar();
}
while (ch >= '0'&&ch <= '9') {
ret = ret * 10 + ch - '0';
ch = getchar();
}
return ret *= f;
}
int main(){
int t,n;
t=read();
for(int kase=1;kase<=t;kase++){
n=read();
for(int i=1;i<=n;i++)
a[i]=read();
sort(a+1,a+1+n);
memset(dp,0,sizeof(dp));
int ans=1;
dp[1][0][1]=dp[1][1][0]=dp[1][1][2]=1;
for(int i=2;i<=n;i++){
for(int j=0;j<=2;j++){//到i改动了j次
if(j==0){//到a[i]一次未改
if(a[i]-a[i-1]<=2)
dp[i][0][1]=dp[i-1][0][1]+1;
else dp[i][0][1]=1;
continue;
}
for(int k=0;k<=2;k++){//a[i]
dp[i][j][k]=1;//初始化为1
for(int l=0;l<=2;l++){//a[i-1]
int ai=a[i]+k-1,aj=a[i-1]+l-1;
if(k==1){//a[i]不修改
if(ai-aj<=2)
dp[i][j][k]=max(dp[i][j][k],dp[i-1][j][l]+1);
}
else{
if(ai-aj<=2)
dp[i][j][k]=max(dp[i][j][k],dp[i-1][j-1][l]+1);
}
}
}
}
for(int j=0;j<=2;j++)
for(int k=0;k<=2;k++)
ans=max(ans,dp[i][j][k]);
}
printf("Case %d: %d\n",kase,ans);
}
}

How many groups(DP)的更多相关文章

  1. HDU 4293 Groups (线性dp)

    OJ题目:click here~~ 题目分析:n个人分为若干组 , 每一个人描写叙述其所在的组前面的人数和后面的人数.求这n个描写叙述中,最多正确的个数. 设dp[ i ] 为前i个人的描写叙述中最多 ...

  2. UVA - 11584 Partitioning by Palindromes[序列DP]

    UVA - 11584 Partitioning by Palindromes We say a sequence of char- acters is a palindrome if it is t ...

  3. HDU 4293---Groups(区间DP)

    题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=4293 Problem Description After the regional con ...

  4. Codeforces Round #369 (Div. 2)---C - Coloring Trees (很妙的DP题)

    题目链接 http://codeforces.com/contest/711/problem/C Description ZS the Coder and Chris the Baboon has a ...

  5. Codeforces Round #369 (Div. 2) C. Coloring Trees DP

    C. Coloring Trees   ZS the Coder and Chris the Baboon has arrived at Udayland! They walked in the pa ...

  6. [poj3378] Crazy Thairs (DP + 树状数组维护 + 高精度)

    树状数组维护DP + 高精度 Description These days, Sempr is crazed on one problem named Crazy Thair. Given N (1 ...

  7. android dp

    http://www.see-say.com/viewnews-47657.html http://cn.club.vmall.com/thread-970026-1-1.html http://ww ...

  8. C. Coloring Trees DP

    传送门:http://codeforces.com/problemset/problem/711/C 题目: C. Coloring Trees time limit per test 2 secon ...

  9. codeforces 484D D. Kindergarten(dp)

    题目链接: D. Kindergarten time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

随机推荐

  1. ADC(简易的DMA传输)的认识

    ADC(简易的DMA传输)的认识 首先看到是ADC的特性 1.ADC的12位分辨率.不能直接测量负电压,然后是最小量程化单位是LSB=Vref+/212 2.单次和转换模式的使用 3. 从通道0到通道 ...

  2. java中关于异常的处理

    初学java的时候,当我们碰到异常时,一般会把异常直接throws抛出去,或则在catch的时候,简单的写一句打印异常信息,但是在实际开发中,是不能这么做的.如果我们将底层的某一个异常简单的print ...

  3. NGUI的Tween动画的使用

    一,在创建Tween有,alpha,color,width,height,position,rotation,scale和transfrom这几种动画类型 1>alpha:颜色由浅变深(透明度) ...

  4. Checklist: 2019 05.01 ~ 06.30

    Golang Lessons learned porting 50k loc from Java to Go Five things that make Go fast Simple techniqu ...

  5. 阿里云LNMP环境安装

    文档里有一键部署LNMP环境和手动搭建LNMP环境您看下 镜像部署 LNMP 环境:https://help.aliyun.com/document_detail/25427.html?spm=517 ...

  6. Android】Retrofit网络请求参数注解,@Path、@Query、@QueryMap...(转)

    对Retrofit已经使用了一点时间了,是时候归纳一下各种网络请求的service了. 下面分为GET.POST.DELETE还有PUT的请求,说明@Path.@Query.@QueryMap.@Bo ...

  7. Sass函数-值列表index

    ndex() 函数类似于索引一样,主要让你找到某个值在列表中所处的位置.在 Sass 中,第一个值就是1,第二个值就是 2,依此类推: >> index(1px solid red, 1p ...

  8. 前端每日实战:63# 视频演示如何用纯 CSS 创作一台烤面包机

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/OEBJRN 可交互视频 此视频是可 ...

  9. Win7 ODBC驱动 Excel (转)

    “控制面板-管理工具-数据源(ODBC)”,打开“ODBC数据源管理器”窗口,然后“添加”,打开“创建新数据源”的窗口,最后选择Microsoft Access Driver(*.mdb)选项,往后等 ...

  10. v-for中的key的使用【key的作用主要是是为了高效的更新虚拟DOM】

    vue中列表循环需加:key="唯一标识" 唯一标识可以是item里面id index等,因为vue组件高度复用增加Key可以标识组件的唯一性,为了更好地区别各个组件 key的作用 ...