首页 > 其他分享 >P4290 [HAOI2008] 玩具取名

P4290 [HAOI2008] 玩具取名

时间:2024-05-13 19:20:30浏览次数:15  
标签:字符 return int 取名 205 P4290 change HAOI2008

原题链接

题解

1.复杂问题简单化,把字符用数字代替
2.每次替换都会减少一个字符,到最后一定是由两个字符合成一个字符,并且这两个字符的来源区间不相交
3.相同区间不同的合并方式,最后生成的字符也不同,所以dp多加一个状态
4.题目只问能否合成对应字符

code

#include<bits/stdc++.h>
using namespace std;
int a[5]={0},can[5][5][5]={0},dp[205][205][5]={0};
int change(char c)
{
    if(c=='W') return 1;
    if(c=='I') return 2;
    if(c=='N') return 3;
    if(c=='G') return 4;
}
int main()
{
        for(int i=1;i<=4;i++)cin>>a[i];

        for(int i=1;i<=4;i++)
        {
            for(int j=1;j<=a[i];j++)
            {
                string s;
                cin>>s;
                can[i][change(s[0])][change(s[1])]=1;//i 是否能由【jk】得来
            }
        }

        string s;
        cin>>s;
        int len=s.size();

        s=" "+s;

        for(int i=1;i<=len;i++) dp[i][i][change(s[i])]=1;//[l,r] 能否变成i
        for(int k=2;k<=len;k++)
        {
            for(int l=1;l+k-1<=len;l++)
            {
                int r=l+k-1;
                for(int i=l;i<r;i++)
                {
                    for(int c1=1;c1<=4;c1++)//区间[l,r] 是否能够得到字符c1
                    {
                        for(int c2=1;c2<=4;c2++)//左半区间能否得到字符c2
                        {
                            for(int c3=1;c3<=4;c3++)//右半区间能否得到字符c3
                            {
                                if(can[c1][c2][c3]&&dp[l][i][c2]&&dp[i+1][r][c3])
                                {
                                    dp[l][r][c1]=1;
                                }
                            }
                        }
                    }
                }
            }
        }

        int flag=0;
        if(dp[1][len][1]) {flag=1;cout<<"W";}
        if(dp[1][len][2]) {flag=1;cout<<"I";}
        if(dp[1][len][3]) {flag=1;cout<<"N";}
        if(dp[1][len][4]) {flag=1;cout<<"G";}
        if(!flag) puts("The name is wrong!");
    return 0;
}

标签:字符,return,int,取名,205,P4290,change,HAOI2008
From: https://www.cnblogs.com/pure4knowledge/p/18189820

相关文章

  • [HAOI2008] 糖果传递
    非常经典的数学题。设\(x_i\)表示\(i\)给右边的人多少糖(如果\(x_i<0\),就是从右边的人那里拿糖)。先考虑列出方程\[\left\{\begin{matrix}a_1-x_1+x_n=\bara\\a_2-x_2+x_1=\bara\\\cdots\\a_n-x_n+x_{n-1}=\bara\\\end{matrix}\right.\]用\(x_1\)表示\(x_......
  • Python——取名规范
    选择简单易懂的名称除非编写的代码是“一次性”的,仅需运行一次,不需要长期维护,否则应该在命名这件事上花些工夫。如果只是简单地用a,b,c作为变量名,将会花费不必要的心里会议当初这些变量的作用。计算机并不在乎名称是否言简意赅还是语焉不详。名称的作用是让人更容易阅读而不是让计......
  • 浙大软院2024届推免录取名单及分析
    名单分析浙大软院共录取电子信息专业推免生219人,机械专业推免生20人小Tips:浙大软院夏令营考核时间比较长,并且不发offer,但是如果夏令营能拿到优营能够直入预推免哦,以浙大为梦校并且背景不是特别好的同学可以多关注一下......
  • 中国人民大学信息学院和高瓴人工智能学院2024届推免拟录取名单
    名单信息学院高瓴人工智能学院分析人大信息学院共录取推免生**77人,其中电子信息专业18人,计算机科学与技术专业46人,管理科学与工程专业13人。**高瓴人工智能学院共录取推免生19人。小Tips:人大只有夏令营没有预推免哦欢迎关注我的公众号“程序员小风学长”,定期分享......
  • 清华深圳2024届推免拟录取名单
    名单分析清华深圳数据科学与信息技术专业共录取41人;清华深圳计算机技术专业共录取37人,都是专硕085404计算机技术;电子信息专业大数据工程方向录取推免生13人;电子信息集成电路与系统方向录取推免生18人;电子信息人工智能方向录取推免生35人;电子信息智能制造方......
  • 清华深圳2024届推免拟录取名单
    名单分析清华深圳数据科学与信息技术专业共录取41人;清华深圳计算机技术专业共录取37人,都是专硕085404计算机技术;电子信息专业大数据工程方向录取推免生13人;电子信息集成电路与系统方向录取推免生18人;电子信息人工智能方向录取推免生35人;电子信息智能制造方......
  • 清华交叉信息研究院2024届推免拟录取名单
    直博生硕士分析清华交叉信息研究院在推免中共录取直博生41人,其中081200计算机科学与技术24人,物理学17人;共录取硕士生7人,都是081200计算机科学与技术专业本文由博客一文多发平台OpenWrite发布!......
  • 清华交叉信息研究院2024届推免拟录取名单
    直博生硕士分析清华交叉信息研究院在推免中共录取直博生41人,其中081200计算机科学与技术24人,物理学17人;共录取硕士生7人,都是081200计算机科学与技术专业本文由博客一文多发平台OpenWrite发布!......
  • Spring Bean 名称暗藏玄机,这样取名就不会被代理
    一些使用小细节就是在不断的源码探索中逐步发现的,今天就来和小伙伴们聊一下通过beanName的设置,可以让一个bean拒绝被代理!1.代码实践假设我有如下一个切面:@Aspect@EnableAspectJAutoProxy@ComponentpublicclassLogAspect{@Pointcut("execution(*org.javaboy.demo.s......
  • P1 P2508 [HAOI2008]圆上的整点
    [HAOI2008]圆上的整点23.3.22WE.真是一道神题,特别是对于刚得了甲流滚回家摆烂从而有时间乱看而恰巧这几天上课刚学复数的我。一直很好奇复数到底是什么,昨天晚上刷B站学习偶然看到了一个解释虚数的视频,结果也没看懂,只听说乘上一个\(i\)相当于旋转\(90^{\circ}\),一想还真是!......