zoukankan      html  css  js  c++  java
  • Topcoder8307 SRM390 SetOfPatterns

    其实这是一道简单题不知道为什么1AC

    定义(dp[i][S])表示前(i)的长度,取了(S)这个集合,这样就可以用(dp[i][S])更新(dp[i+1][S与v]​)
    最后统计一下答案就好了。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int M=1000003;
    int st,cnt,dp[52][1<<15],len,ans,n;//f[x][y]表示到第x位已经考虑了y(二进制表示) 
    char c;
    class SetOfPatterns{
    	public:
    		int howMany(vector<string>s,int k){
    			n=s.size();
    			len=s[0].size();
    			for(int i=0;i<len;i++)//考虑每一位 
    				for(c='a';c<='z';c++){//考虑这一位上放什么 
    					st=0;//st表示这一位上可以成为c的方案(二进制表示) 
    					for(int j=0;j<n;j++)
    						if(s[j][i]=='?'||s[j][i]==c)st|=1<<j;
    					if(!i)dp[i][st]++;
    					else for(int j=0;j<1<<n;j++)(dp[i][st&j]+=dp[i-1][j])%=M;
    				}
    			for(int i=0;i<1<<n;i++){
    				cnt=0;
    				for(int j=0;j<n;j++)
    					if(i&(1<<j))cnt++;
    				if(cnt==k)(ans+=dp[len-1][i])%=M;
    			}
    			return ans;
    		}
    };
    
  • 相关阅读:
    MSSQL如何将查询结果拼接成字符串
    SQL删除指定条件的重复数据,只保留一条
    清除日志
    jsp使用
    Eclipse使用
    SSM框架开发遇到的问题
    SpringMvc学习
    大中华~~汉字
    Word技巧设置
    AWS-资源访问慢分析
  • 原文地址:https://www.cnblogs.com/zryabc/p/10388147.html
Copyright © 2011-2022 走看看