题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1055

区间DP,注意初始化!!

因为没记忆化,TLE了一晚上,区间DP尤其要注意不重复递归!!!!!

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int const MAXN=80,LEN=205;
int p[5][5][MAXN],a[LEN],top[5],ln,tp[5][5];
char dc[LEN];
bool can[LEN][LEN][5],flag,f[5],vis[LEN][LEN];
int in(char c)
{if(c=='W')return 1;if(c=='I')return 2;if(c=='N')return 3;if(c=='G')return 4;
}
char out(int x)
{flag=1;if(x==1)return 'W';if(x==2)return 'I';if(x==3)return 'N';if(x==4)return 'G';
}
void cl(int i,char c[])
{int k1=in(c[0]),k2=in(c[1]);p[k1][k2][++tp[k1][k2]]=i;
}
//void find0(int x,int y)
//{
//    for(int i=1;i<=tp[x][y];i++)
//        f[p[x][y][i]]=1;
//}
//void find(int l,int r,int x,int y)
//{
//    for(int i=1;i<=tp[x][y];i++)
//        can[l][r][p[x][y][i]]=1;
//}
void dp(int l,int r)
{if(vis[l][r])return;//大剪枝!!!!! vis[l][r]=1;if(r==l)
//    {
//        find(l,r,a[l],a[r]);return;
//    }for(int k=l;k<r;k++){dp(l,k);dp(k+1,r);for(int x=1;x<=4;x++)for(int y=1;y<=4;y++)if(can[l][k][x]&&can[k+1][r][y])for(int i=1;i<=tp[x][y];i++)can[l][r][p[x][y][i]]=1;
//                    find(l,r,x,y);
    }
}
int main()
{for(int i=1;i<=4;i++)scanf("%d",&top[i]);for(int i=1;i<=4;i++)for(int j=1;j<=top[i];j++){cin>>dc;cl(i,dc);}cin>>dc;ln=strlen(dc);for(int i=1;i<=ln;i++)//初始化
    {can[i][i][in(dc[i-1])]=1;
//        p[dc[i-1]][dc[i-1]][++tp[dc[i-1]][dc[i-1]]]=in(dc[i-1]);
    }for(int k=1;k<ln;k++){dp(1,k);dp(k+1,ln);for(int x=1;x<=4;x++)for(int y=1;y<=4;y++)if(can[1][k][x]&&can[k+1][ln][y])for(int i=1;i<=tp[x][y];i++)f[p[x][y][i]]=1;
//                    find0(x,y);
    }for(int i=1;i<=4;i++)if(f[i])printf("%c",out(i));if(!flag)printf("The name is wrong!");return 0;
}

转载于:https://www.cnblogs.com/Zinn/p/8661317.html

bzoj1055玩具取名——区间DP相关推荐

  1. BZOJ1055: [HAOI2008]玩具取名[区间DP]

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1588  Solved: 925 [Submit][Sta ...

  2. bzoj1055 [HAOI2008]玩具取名 区间DP

    问题描述 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用"WING"中任意两个字母 ...

  3. 「BZOJ1055」[HAOI2008] 玩具取名 - 区间动规 - 记忆化搜索

    ->戳我进原题 [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2486 Solved: 1448 Descript ...

  4. bzoj 1055: [HAOI2008]玩具取名(区间DP)

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2010  Solved: 1177 [Submit][St ...

  5. BZOJ 1055 [HAOI2008]玩具取名

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1119  Solved: 653 [Submit][Sta ...

  6. [HAOI2008]玩具取名

    [HAOI2008]玩具取名 文章目录 题目描述 输出描述: 题解 代码: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO F ...

  7. [BZOJ]1055: [HAOI2008]玩具取名

    Time Limit: 10 Sec  Memory Limit: 162 MB Description 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字 ...

  8. POJ 2955 Brackets (区间DP)

    题目链接:http://poj.org/problem?id=2955 Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  9. 0x53. 动态规划 - 区间DP(习题详解 × 8)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 0x53. 动态规划 - 区间DP Problem A. 最优矩阵链乘 Problem B. ...

最新文章

  1. SVG技术入门:线条动画实现原理
  2. 不需要训练数据的图像恢复
  3. poj2406Power string
  4. vue多语言插件vue-i18n
  5. 宅男福利:Python爬取某站所有漫画(赶紧收藏)
  6. 攻防世界logmein
  7. h5支付不能打开支付宝 ios_iOS 手机网站支付转Native支付(H5支付页面调起支付宝客户端(app))...
  8. C语言 7-3 统计大写字母个数
  9. 第二届长三角高校数学建模竞赛
  10. LCM5369 降压控制器 P2P替代TPS536C9
  11. 中图法分类号(计算机专业)
  12. Kotlin - DSL
  13. wordpress搭建
  14. 15-02 身份安全
  15. 基于MATLAB的可靠度指标与失效概率的计算
  16. tez引擎跑hive 语句报错问题解决
  17. 公司邮箱,那些隐藏的高效办公秘密武器
  18. 国科大学习资料–模式识别--第一次作业
  19. 流量矿石:经历九死一生,曾获王欣亲自嘉奖,被5亿快播用户追捧
  20. Hightchart 实现 polar 雷达图

热门文章

  1. SAP UI5对于颜色使用的最佳实践
  2. 最简单的dockerfile使用教程 - 创建一个支持SSL的Nginx镜像
  3. python不能安装pip_python – 无法安装pip:权限被拒绝错误
  4. 只出现一次的数字Python解法
  5. 数据集转换_“2000坐标”成了标配,你还不懂坐标系定义和转换吗?
  6. 幼儿园带括号算式口诀_这么全的小学数学速算技巧、口诀不多见,教给孩子挺不错!...
  7. python安装库失败cannot determine archive_pip 无法安装 pip
  8. spring java配置_Spring基于java的配置
  9. linux 22.3 终端,Linux系统服务Day.22
  10. mariadb中文手册_MariaDB性能调优工具mytop的使用详解