zoukankan      html  css  js  c++  java
  • agc020E

    题目大意

    |S|<=100

    题解

    标算是状压,这波出题人在地下室

    一开始想直接设f[i]来求[1,i],然后枚举结尾重复串再考虑里面的,反演计算

    以为里面的子问题可以设成g[i][j]表示循环节为i的长度为j的串的答案,然后假了,比如100100这种情况,100并不能表示成g

    实际上直接把里面的暴力递归算即可,写个程序算一下复杂度发现是两亿多,5s随便过

    code

    懒得加记忆化了

    #include <bits/stdc++.h>
    #define fo(a,b,c) for (a=b; a<=c; a++)
    #define fd(a,b,c) for (a=b; a>=c; a--)
    #define add(a,b) a=((a)+(b))%998244353
    #define mod 998244353
    #define ll long long
    //#define file
    using namespace std;
    
    int n,i,j,k,l;
    char a[101];
    
    ll dg(char *a,int n)
    {
    	char A[101];
    	ll f[101];
    	int i,j,k,l;
    	
    	memset(f,0,sizeof(f));
    	memset(A,0,sizeof(A));
    	f[0]=1;
    	fo(i,1,n)
    	{
    		f[i]=f[i-1]*(1+(a[i]=='1'))%mod;
    		fd(j,i/2,1)
    		{
    			fo(k,i-j+1,i) A[i-k+1]=a[k];
    			l=0;
    			fd(k,i-j,1)
    			{
    				++l;A[l]=(a[k]=='0')?'0':A[l];
    				if (l==j) add(f[i],f[k-1]*dg(A,j)),l=0;
    			}
    		}
    	}
    	return f[n];
    }
    
    int main()
    {
    	#ifdef file
    	freopen("agc020E.in","r",stdin);
    	#endif
    	
    	scanf("%s",a+1),n=strlen(a+1);
    	printf("%lld
    ",dg(a,n));
    	
    	fclose(stdin);
    	fclose(stdout);
    	return 0;
    }
    
  • 相关阅读:
    docker-compose
    获取时区
    maven插件
    jquery_ui_api中文
    sax xpath读取xml字符串
    Ant打包
    [转]html5音乐播放器
    javax mail网址
    vbscript调用fso
    fso查找被删除的文件
  • 原文地址:https://www.cnblogs.com/gmh77/p/13741615.html
Copyright © 2011-2022 走看看