zoukankan      html  css  js  c++  java
  • P4290 [HAOI2008]玩具取名

    这就是码力的差距,会但是写不出来!!

    之后我忘提交了,然后90,当我没说
    这还是码力的差距哇!!!

    我的90

    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <vector>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #define ll long long
    using namespace std;
    
    const int A = 1e7+10;
    const int B = 1e3+10;
    const int mod = 1e9 + 7;
    const int inf = 0x3f3f3f3f;
    
    inline int read() {
      char c = getchar();
      int x = 0, f = 1;
      for ( ; !isdigit(c); c = getchar()) if (c == '-') f = -1;
      for ( ; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48);
      return x * f;
    }
    int q[B];
    int f[B][B][100];
    char cc[5]={'Q','W','I','N','G'};
    struct node{char a;char b;}p[5][B],W[B],I[B],N[B],G[B];
    char s[B];
    int main()
    {
    	for (int i=1;i<=4;i++) q[i]=read();
    	for (int j=1;j<=4;j++)
    	for (int i=1;i<=q[j];i++)
    	{	
    		char ss[5];
    		scanf("%s",ss);
    		p[j][i].a=ss[0],p[j][i].b=ss[1];
    	}
    	cin>>s+1;	
    	int n=strlen(s+1);
    	for (int i=1;i<=n;i++) f[i][i][s[i]-'A'+1]=1;
    	for (int len=2;len<=n;len++)
    		for (int l=1;l+len-1<=n;l++)
    	 	{
    		 	int r=l+len-1;
    		 	for (int c=1;c<=4;c++)
    		 	{
    		 		for (int i=1;i<=q[c];i++)
    		 		{
    					for (int k=l;k<=r;k++)
    		 			{	
    						if(f[l][k][p[c][i].a-'A'+1] && f[k+1][r][p[c][i].b-'A'+1])		
    						f[l][r][cc[c]-'A'+1]=1;
    					}
    				}
    			}	
    		 }
    	for (int i=1;i<=4;i++) if(f[1][n][cc[i]-'A'+1]) cout<<cc[i];
    	return 0;
    }
    
    
    
    

    我抄的,区间DP是我的

    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <vector>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #define ll long long
    using namespace std;
    
    const int A = 1e7+10;
    const int B = 1e3+10;
    const int mod = 1e9 + 7;
    const int inf = 0x3f3f3f3f;
    
    inline int read() {
      char c = getchar();
      int x = 0, f = 1;
      for ( ; !isdigit(c); c = getchar()) if (c == '-') f = -1;
      for ( ; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48);
      return x * f;
    }
    
    int num[B],p[B*2][3],f[B][B][5];
    char s[210];
    int check(char i)
    {
    	if (i=='W') return 1;
    	if (i=='I') return 2;
    	if (i=='N') return 3;
    	if (i=='G') return 4;
    }
    
    int main()
    {
    	int tot=0;
    	for (int i=1;i<=4;i++) num[i]=read();
    	for (int i=1;i<=4;i++)
    	{
    		for (int j=1;j<=num[i];j++)
    		{
    			char ss[5];
    			scanf("%s",ss);
    			p[++tot][0]=i;
    			p[tot][1]=check(ss[0]);
    			p[tot][2]=check(ss[1]);
    		}
    		getchar();
    	}
    	gets(s+1);
    	int len=strlen(s+1);
    	for (int i=1;i<=len;i++) f[i][i][check(s[i])]=1;
    	for (int l=2;l<=len;l++)
    		for (int i=1;i+l-1<=len;i++)
    		{
    			int j=i+l-1;
    			for (int k=i;k<j;k++)
    				for (int c=1;c<=tot;c++)
    				{
    					if (f[i][k][p[c][1]] && f[k+1][j][p[c][2]])
    					f[i][j][p[c][0]]=1;
    					//printf("%d
    ",f[i][j][p[c][0]]);
    				}
    		} 
    //		for(register int i=len;i>0;--i)  
    //    	for(register int j=i+1;j<=len;++j)  
    //    		for(register int k=i;k<j;++k)  
    //    			for(register int l=1;l<=tot;++l)   
    //						if (f[i][k][p[l][1]] && f[k+1][j][p[l][2]])
    //					f[i][j][p[l][0]]=1;
    	int flag=0;
    	for (int i=1;i<=4;i++)
    	{
    		if(f[1][len][i])
    		{
    			flag=1;
    			if (i==1) printf("W");
    			if (i==2) printf("I");
    			if (i==3) printf("N");
    			if (i==4) printf("G");
    		}
    	}
    	if (!flag) printf("The name is wrong!");
    	return 0;
    }
    
  • 相关阅读:
    告别单身淘宝小店
    微信机器人 细腻化
    # 导入模块 from wxpy import * # 初始化机器人,扫码登陆 bot = Bot()
    减小文件大小 减少 帧
    无有效图视频
    生成一张白色图片的算法--逻辑
    加logo
    字幕 3系数
    音频分析 字幕同步
    尊重百度的api语音合成规则
  • 原文地址:https://www.cnblogs.com/lToZvTe/p/14586187.html
Copyright © 2011-2022 走看看