zoukankan      html  css  js  c++  java
  • 【Sdoi2009】Bill的挑战 状态压缩

    【Sdoi2009】Bill的挑战 状态压缩


    问题:
    此处输入图片的描述


    解:
    此处输入图片的描述

    此处输入图片的描述

    方案不会算重 因为到达的顺序一定不一样


    code:

      //
    #include<stdio.h>
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define maxnn 46496
    #define mod 1000003
    ll f[55][maxnn];
    ll g[55][maxnn];
    string s[1000];
    int T;
    ll n,k;
    ll all=0;
    ll ans=0;
    int main() {
    	cin>>T;
    	while(T--) {
    		scanf("%lld%lld",&n,&k);
    		int tmp=0;
    		ans=0;
    		for(int i=1; i<=n; i++) {
    			cin>>s[i];
    		}
    		tmp=s[1].size();
    		all=(1<<n)-1;
    		for(int i=0; i<=tmp; i++)
    			for(int j=0; j<=all; j++) f[i][j]=0;
    			for(int i=0; i<=tmp; i++)
    			for(int j=0; j<=26; j++) g[i][j]=0;
    		for(int i=1; i<=n; i++) {
    			for(int j=0; j<s[i].size(); j++) {
    				if(s[i][j]=='?') {
    					for(int kk=1; kk<=26; kk++)
    						g[j+1][kk]|=(1<<i-1);
    				} else
    					g[j+1][(s[i][j]-'a')+1]|=(1<<i-1);
    			}
    		}
    		for(int p=0; p<=26; p++)
    			f[1][g[1][p]]++;
    		for(int i=1; i<=tmp; i++) {
    			for(int j=0; j<=all; j++) {
    				for(int kk=1; kk<=26; kk++) {
    					f[i+1][j&(g[i+1][kk])]+=f[i][j];
    					f[i+1][j&(g[i+1][kk])]%=mod;
    				}
    			}
    		}
    		for(int s=0; s<=all; s++) {
    			int t=0;
    			for(int i=s; i; i=i-(i&-i)) {
    				t++;
    			}
    			if(t==k) {
    				ans+=f[tmp][s];
    				ans%=mod;
    			}
    		}
    		printf("%lld
    ",ans%mod);
    	}
    
    }
    
    刀剑映出了战士的心。而我的心,漆黑且残破
  • 相关阅读:
    【spring 注解驱动开发】spring ioc 原理
    目录大纲,欢迎来戳
    进程相关
    网络编程相关知识点
    Django基本知识
    浅谈 Web框架
    浅谈 Flask 框架
    AJAX小示例
    浅谈cookie 和 session
    ORM:对象关系映射
  • 原文地址:https://www.cnblogs.com/OIEREDSION/p/11435789.html
Copyright © 2011-2022 走看看