zoukankan      html  css  js  c++  java
  • [NOI2009]管道取珠

    Description:

    上管道中有n个球, 下管道中有m个球,则整个游戏过程需要进行n+m次操作,即将所有左侧管道中的球移入输出管道。最终n+m个球在输出管道中从右到左形成输出序列
    假设最终可能产生的不同种类的输出序列共有K种,其中:第i种输出序列的产生方式(即不同的操作方式数目)有ai个。聪明的小X早已知道,

    Σai=C(n+m,n)

    因此,小X希望计算得到:

    Σ(ai)^2

    Hint:

    对于100%的数据,满足:m,n<=500。

    Solution:

    神仙dp

    考虑答案式子的意义,不好直接算
    其实它表示 两个人同时进行取球游戏且取到相同序列 的方案
    只要想清楚这句话,dp还是很好写的

    #include <map>
    #include <set>
    #include <stack>
    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <iostream>
    #include <algorithm>
    #define ls p<<1 
    #define rs p<<1|1
    using namespace std;
    typedef long long ll;
    const int mxn=505,mod=1024523;
    int n,m,f[2][mxn][mxn];
    char a[mxn],b[mxn];
    inline int read() {
    	char c=getchar(); int x=0,f=1;
    	while(c>'9'||c<'0') {if(c=='-') f=-1;c=getchar();}
    	while(c<='9'&&c>='0') {x=(x<<3)+(x<<1)+(c&15);c=getchar();}
    	return x*f;
    }
    inline int chkmax(int &x,int y) {if(x<y) x=y;}
    inline int chkmin(int &x,int y) {if(x>y) x=y;}
    
    struct ed {
    	int to,nxt;
    }t[mxn<<1];
    
    inline void add(int &u,int v) {
    	(u+=v)%=mod;
    }
    
    int main()
    {
    	n=read(); m=read();
    	scanf("%s %s",a+1,b+1); f[0][0][0]=1;
    	reverse(a+1,a+n+1); reverse(b+1,b+m+1);
    	for(int i=0;i<=n;++i) {
    		for(int j=0;j<=m;++j) 
    			for(int k=0;k<=n;++k) {
    				int l=i+j-k,val=f[i&1][j][k];
    				if(l<0||l>m) continue ;
    				if(a[i+1]==a[k+1]) add(f[i&1^1][j][k+1],val);
    				if(a[i+1]==b[l+1]) add(f[i&1^1][j][k],val);
    				if(b[j+1]==a[k+1]) add(f[i&1][j+1][k+1],val);
    				if(b[j+1]==b[l+1]) add(f[i&1][j+1][k],val);
    				f[i&1][j][k]=0;
    			}
    			}
    	printf("%d",f[n&1^1][m][n]);		
        return 0;
    }
    
    
  • 相关阅读:
    java IO流之详细总结
    位运算了解与复习多线程
    java 常见面试题总结(一)
    复习集合框架
    【面试题】java中高以上必会技能
    python-项目流程分析及优化查询方法
    python-day97--django-ModelForm
    python-day97--git协同开发
    python-day96--git版本控制
    python-day91--同源策略与Jsonp
  • 原文地址:https://www.cnblogs.com/list1/p/10509997.html
Copyright © 2011-2022 走看看