• 区间dp


    https://vjudge.net/contest/226480#problem/B

    参考博客:https://blog.csdn.net/limhhhhh/article/details/50599551

    #include<iostream>
    #include<cstring>
    using namespace std;
    int solve(char a,char b)
    {
     if((a=='('&&b==')')||(a=='['&&b==']'))
     return 1;
     else
     return 0;
    }
    int main()
    {
     char s[110];
     while(cin>>s)
     {
      if(s[0]=='e')
      break;
      int len=strlen(s);
      int dp[110][110];
      memset(dp,0,sizeof(dp));
      for(int i=0;i<len;i++)
      {
       if(solve(s[i],s[i+1]))
       dp[i][i+1]=2;
      }
      for(int i=3;i<=len;i++)
      {
       for(int j=0;j+i-1<len;j++)
       {
        if(solve(s[j],s[j+i-1]))
        dp[j][j+i-1]=dp[j+1][j+i-2]+2;
        for(int k=j;k<i+j-1;k++)
        {
         dp[j][j+i-1]=max(dp[j][i+j-1],dp[j][k]+dp[k+1][j+i-1]); 
        }
       }
      }
      cout<<dp[0][len-1]<<endl;
     }
     return 0;
    }
    

      

    https://vjudge.net/contest/226480#problem/A

    参考博客 :https://blog.csdn.net/qq_33362864/article/details/75269282

    #include<iostream>
    #include<cmath>
    #include<cstring>
    using namespace std;
    int main()
    {
        int t,Case=1;
        int dp[150][150];
        cin>>t;
        while(t--)
        {
            memset(dp,0,sizeof(dp));
            int n;
            cin>>n;
            int a[150];
            for(int i=0;i<n;i++)
            cin>>a[i];
            for(int i=n-1;i>=0;i--)
            {
                for(int j=i;j<n;j++)
                {
                    dp[i][j]=dp[i+1][j]+1;
                    for(int k=i+1;k<=j;k++)
                    {
                        if(a[k]==a[i])
                        dp[i][j]=min(dp[i][j],dp[i+1][k-1]+dp[k][j]);
                    }
                }
            }
            cout<<"Case "<<Case<<": "<<dp[0][n-1]<<endl; 
            Case++;
        }
        return 0;
    }

    https://vjudge.net/contest/226480#problem/C

    参考博客 :https://blog.csdn.net/sdjzping/article/details/19160013

    #include<iostream>
    #include<cstring>
    #define mod 1000000007
    long long dp[750][750][3][3];
    char s[750];
    int tmp[750],match[750];
    //0代表不涂色,1代表涂红色,2代表涂蓝色 
    void dfs(int l,int r)
    {
    	if(l+1==r)
    	{
    		dp[l][r][0][1]=1;
    		dp[l][r][0][2]=1;
    		dp[l][r][1][0]=1;
    		dp[l][r][2][0]=1;
    		return ;
    	}
    	if(match[l]==r)
    	{
    		dfs(l+1,r-1);
    		for(int i=0;i<3;i++)
    		{
    			for(int j=0;j<3;j++)
    			{
    				if(j!=1)
    				dp[l][r][0][1]=(dp[l][r][0][1]+dp[l+1][r-1][i][j])%mod;
    				if(j!=2)
    				dp[l][r][0][2]=(dp[l][r][0][2]+dp[l+1][r-1][i][j])%mod;
    				if(i!=1)
    				dp[l][r][1][0]=(dp[l][r][1][0]+dp[l+1][r-1][i][j])%mod;
    				if(i!=2)
    				dp[l][r][2][0]=(dp[l][r][2][0]+dp[l+1][r-1][i][j])%mod;
    			}
    		}
    		return ;
    	}
    	else
    	{
    		int p=match[l];
    		dfs(l,p);
    		dfs(p+1,r);
    		for(int i=0;i<3;i++)
    		{
    			for(int j=0;j<3;j++)
    			{
    				for(int k=0;k<3;k++)
    				{
    					for(int q=0;q<3;q++)
    					{
    						if(!((k==1&&q==1)||(k==2&&q==2)))
    						dp[l][r][i][j]=(dp[l][r][i][j]+(dp[l][p][i][k]*dp[p+1][r][q][j])%mod)%mod;
    					}
    				}
    			}
    		}
    	}
    	return ;
    }
    void getmatch(int len)
    {
    	int p=0;
    	for(int i=0;i<len;i++)
    	{
    		if(s[i]=='(')
    		tmp[p++]=i;
    		else
    		{
    			match[i]=tmp[p-1];
    			match[tmp[p-1]]=i;
    			p--;
    		}
    	}
    }
    using namespace std;
    int main()
    {
    	
    	while(cin>>s)
    	{
    		int len=strlen(s);
    		memset(dp,0,sizeof(dp));
    		getmatch(len);
    		dfs(0,len-1);
    		long long ans=0;
    		for(int i=0;i<3;i++)
    		{
    			for(int j=0;j<3;j++)
    			ans=(ans+dp[0][len-1][i][j])%mod;
    		}
    		cout<<ans<<endl;
    	}
    	return 0;
    }
    

      

    当初的梦想实现了吗,事到如今只好放弃吗~
  • 相关阅读:
    [MySql]explain用法及实践
    [Angularjs]asp.net mvc+angularjs+web api单页应用
    asp.net预定义的HttpModule
    不使用配置文件动态注册HttpModule
    DELPHI NEXTGEN编译开关
    mormot中间件成功匹配客户端FDMemTable和ClientDataSet
    firedac数据集和字符串之间相互转换
    Delphi XE中String、ANSIString、TBytes之间的转换
    论DELPHI三层的数据序列格式的变化
    MORMOT的数据序列
  • 原文地址:https://www.cnblogs.com/caijiaming/p/8992261.html
Copyright © 2020-2023  润新知