【题目链接】 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. 【BZOJ 2006】[NOI2010]超级钢琴 ST

    我们先把所有最左端对应的最优右端入堆,eg: z  在[l,r](由题目给出的L,R决定)之间的最优解 y,然后出堆以后,再入堆z,y-1,z,y+1,那么我们只需要用st找最大前缀和就好了(ST是一 ...

  2. Codeforces Round #526 (Div. 2) D. The Fair Nut and the Best Path

    D. The Fair Nut and the Best Path 题目链接:https://codeforces.com/contest/1084/problem/D 题意: 给出一棵树,走不重复的 ...

  3. 清理/var/spool/clientmqueue目录释放大量空间

    清理/var/spool/clientmqueue目录可以释放大量空间,具体命令是:ls | xargs rm -f 文件太大,rm -rf会由于参数太多而无法删除,所以需要用上面的命令. “Argu ...

  4. JVM 性能排查--查看哪个对象占用内存大

    参考:http://blog.csdn.net/chenleixing/article/details/44227327/ 1.  在IE地址栏中输入:http://localhost/test/in ...

  5. 【BZOJ4766】文艺计算姬 [暴力]

    文艺计算姬 Time Limit: 1 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description "奋战三星期,造台计算机 ...

  6. python中的scapy模块

    scapy模块是干嘛用的? 答:Scapy的是一个强大的交互式数据包处理程序(使用python编写).它能够伪造或者解码大量的网络协议数据包,能够发送.捕捉.匹配请求和回复包等等.它可以很容易地处理一 ...

  7. Python小程序之sed命令替换

    需求: 编写sed命令脚本 代码如下 # Author:Lee Sir import sys,os des_file = r'E:\StartPython\day3\test.txt' des_fil ...

  8. 从setting文件导包

    两种方式 from project.settings.py import s3_key 第二种: from django.conf import setting s3_key = settings.S ...

  9. 百度面试题——top K算法

    需求 从一亿个数据中,找出其中最小的10个数. 分析 最笨的方法就是将这一亿个数据,按从小到大进行排序,然后取前10个.这样的话,即使使用时间复杂度为nlogn的快排或堆排,由于元素会频繁的移动,效率 ...

  10. Swift学习三

    http://blog.csdn.net/kuloveyouwei/article/details/36005299 Swift 提供两种集合类型来存储集合,数组和字典.数组是一个同类型的序列化列表集 ...