【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=6017

【题目大意】

  给出一个只包含2和3的串,你可以花费两个智力值交换相邻的两个字符
  问在智力值不降到负数的情况下,可以产生多少个233子串

【题解】

  dp[i][j][k][t]表示在放入前i+j串用了i个2和j个3代价为k,结尾状态为t的最优答案
  t状态分别为2,23,233三种状态,我们在这个题目中,2和3内部都是不会发生交换的
  所以代价只为2和3交换的次数,等价于最后每个2的末位置和初位置的差值,
  枚举2和3的数量,代价和状态,dp即可

【代码】

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
#define REP(i,a,b) for(int i=a;i<=b;i++)
const int N=110,inf=0x3f3f3f3f;
int T,n,m,x,y,dp[N][N][N][3],a[N];
char s[N];
void up(int &a,int b){if(a<b)a=b;}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d%s",&n,&m,s+1); m/=2;
int ca=0,cb=0;
REP(i,1,n)if(s[i]=='2')a[++ca]=i;else cb++;
REP(i,0,ca)REP(j,0,cb)REP(k,0,m)REP(t,0,2)dp[i][j][k][t]=-inf;
dp[0][0][0][0]=0;
REP(i,0,ca)REP(j,0,cb)REP(k,0,m)REP(t,0,2)if(dp[i][j][k][t]>=0){
if(i<ca){
int x=k+abs(i+j+1-a[i+1]);
if(x<=m)up(dp[i+1][j][x][1],dp[i][j][k][t]);
}
if(j<cb){
int x=t,y=dp[i][j][k][t];
if(x)if(x<2)x++;else x=0,y++;
up(dp[i][j+1][k][x],y);
}
}int ans=0;
REP(k,0,m)REP(t,0,2)up(ans,dp[ca][cb][k][t]);
printf("%d\n",ans);
}return 0;
}

HDU 6017 Girls Love 233(多态继承DP)的更多相关文章

  1. 【HDU 6017】 Girls Love 233 (DP)

    Girls Love 233 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  2. Girls Love 233

    Girls Love 233 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) P ...

  3. hdu 5025 Saving Tang Monk 状态压缩dp+广搜

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092939.html 题目链接:hdu 5025 Saving Tang Monk 状态压缩 ...

  4. HDU 3016 Man Down (线段树+dp)

    HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  5. HDU 3341 Lost's revenge AC自动机+dp

    Lost's revenge Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)T ...

  6. 多态(upcast)减少分支判断 以及 多态继承设计、具体类型判断。

    Influenced by <java 八荣八耻>,翻了下<java编程思想> 印象中多态产生的条件:1.子类继承父类 2.父类[指针]指向子类 3.父类引用调用重写(@Ove ...

  7. HDU 2457 DNA repair(AC自动机+DP)题解

    题意:给你几个模式串,问你主串最少改几个字符能够使主串不包含模式串 思路:从昨天中午开始研究,研究到现在终于看懂了.既然是多模匹配,我们是要用到AC自动机的.我们把主串放到AC自动机上跑,并保证不出现 ...

  8. HDU 1028 Ignatius and the Princess III dp整数划分

    http://acm.hdu.edu.cn/showproblem.php?pid=1028 dp[i][j]表示数值为i,然后最小拆分的那个数是j的时候的总和. 1 = 1 2 = 1 + 1 . ...

  9. Hdu 3294 Girls' research (manacher 最长回文串)

    题目链接: Hdu 3294  Girls' research 题目描述: 给出一串字符串代表暗码,暗码字符是通过明码循环移位得到的,比如给定b,就有b == a,c == b,d == c,.... ...

随机推荐

  1. BZOJ1202:狡猾的商人(带权并查集)

    1202: [HNOI2005]狡猾的商人 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1202 Description: 刁姹接到一个 ...

  2. ng父组件调用子组件的方法

    https://www.pocketdigi.com/20170204/1556.html 组件之间方法的调用统一用中间人调用.数据传递直接input和output即可

  3. mysql————表类型(存储引擎)的选择

    表类型(存储引擎)的选择 7.1 mysql存储引擎概述 插件式存储引擎是mysql数据库最重要的特性之一,用户可以根据应用的需要选择ruhr存储和索引数据,是否使用事务等. InnoDB和BDB提供 ...

  4. PRINT_TABLE 列以行形式显示

    在sqlplus,如果列比较多,往往会显示不够清晰,这时如果能把查询语句行转列就明了多了,在网上看到print_table存储过程:里面所设置的日期格式,可根据自己习惯修改 CREATE OR REP ...

  5. LVM to increase and reduce 10G size for /data

    =======================increase10G for/data=============================(system env /dev/MongoData00 ...

  6. javascript中arguments的应用——不定项传参求和

    <script type="text/javascript"> window.onload=function(){ function sum(){ var result ...

  7. Quartus ModelSim联合仿真中的RAM初始化

    Modelsim只支持Hex格式的初始化文件,文件需要放在仿真的根目录下,例如:.\simulation\modelsim:并且在利用Quartus宏生成IP时,选择的初始化文件必须用绝对路径!否则M ...

  8. 【HDU】6146 Pokémon GO

    [题意]一个2*n的网格,再保证步数最少的情况下,求从任意格出发遍历完所有格的方案数,格子八连通.n<=10000,T<=100. [算法]递推,DP [题解]原题链接:蓝桥杯 格子刷油漆 ...

  9. bzoj 1601 最小生成树

    原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1601 最小生成树的比较水的题,我们只需要加一个源点,连向所有的点,边权为每个点建水库的代价 ...

  10. cygwin与vim配置

    参考 http://www.jeepshoe.org/810958442.htm cygwin安装包管理器 通过终端安装apt-cyg之前选要安装以下软件包wget tar gawk bzip2 ap ...