第二个题解错了??
查看原帖
第二个题解错了??
230875
Surge_of_Force楼主2021/8/14 21:15

我刚开始没思路,后来看了第二篇题解,并且跟着他的代码改了半天,却只有十分,后来我把他的代码粘到本地运行了一下,结果字符串c没有定义,我又给他定义上,并且跑了一遍我自己编的这组数据:

1 2 1 1
II
WW NN
GG
NN
WWIINNGG

结果输出却是:

The name is wrong!

我寻思这也没看出来哪错了啊? 望大佬予以解答,顺便贴上我的代码;

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int q[200],sum[5],can[5][5][5],dp[210][210][5],name[210];//can[i][j][k]i和j组合的表示可以转换为k
	string a,qwq="+WING";//dp[i][j][k]表示区间[i,j]可以转换k
	char s1,s2;
	q['W']=1;//建立映射 
	q['I']=2;
	q['N']=3;
	q['G']=4;
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	//读入数据并转换: 
	for(int i=1;i<=4;i++)
		cin>>sum[i];
	for(int i=1;i<=4;i++)
	    for(int j=1;j<=sum[i];j++) 
	    {
	    	cin>>s1>>s2;
	    	can[i][q[s1]][q[s2]]=1;
		}
	cin>>a;
	int n=a.size();
	for(int i=1;i<=n;i++) dp[i][i][q[a[i-1]]]=1;
	/*for(int i=1;i<=n;i++)
	    name[i]=q[(int)a[i]];
	for(int i=1;i<=4;i++)
	{
		for(int j=1;j<=sum[i];j++)
		{
			for(int k=1;k<=2;k++)
			    cout<<can[i][j][k];
		    cout<<endl;
		}	    
	    cout<<endl; 	  
	}
	   */   
	    
	
	//开始dp 
	for(int len=1;len<n;len++)
	    for(int i=1;i<=n-len;i++)
	    {
	    	int j=i+len;
	    	for(int k=i;k<j;k++)        
	        	for(int t=1;t<=4;t++)
			    	for(int z1=1;z1<=4;z1++)
			            for(int z2=1;z2<=4;z2++)
			   	            if(can[t][z1][z2]&&dp[i][k][z1]&&dp[k+1][j][z2])
							    dp[i][j][t]=1;
		}
	/*cout<<n;
	for(int i=1;i<=n;i++)
	{
	    for(int j=1;j<=n;j++)
		{
	    	for(int k=1;k<=4;k++)
	    	    cout<<dp[i][j][k]; 
    	    cout<<endl;
		}
	    cout<<endl;
	}*/
	int ff=0;
	for(int i=1;i<=4;i++)
		if(dp[1][n][i])
		{
		    cout<<qwq[i];
			ff=1;
		}
	if(!ff) cout<<"The name is wrong!";
	return 0;
}
/*1 2 1 1
II
WW NN
GG
NN
WWIINNGG*/

2021/8/14 21:15
加载中...