zoukankan      html  css  js  c++  java
  • 【BZOJ4321】queue2 DP

    【BZOJ4321】queue2

    Description

    n 个沙茶,被编号 1~n。排完队之后,每个沙茶希望,自己的相邻的两人只要无一个人的编号和自己的编号相差为 1(+1 或-1)就行; 
    现在想知道,存在多少方案满足沙茶们如此不苛刻的条件。 

    Input

    只有一行且为用空格隔开的一个正整数 N,其中 100%的数据满足 1≤N ≤ 1000; 

    Output

    一个非负整数,表示方案数对 7777777 取模。    

    Sample Input

    4

    Sample Output

    2
    样例解释:有两种方案 2 4 1 3 和 3 1 4 2

    题解:常见的DP方式:

    我们将n个数从小到大一个一个加入队列中,那么第n个人只有与第n-1个人在一起才是不合法的,所以我们记录f[i][j][0/1]表示前i个人,相邻的不合法的对数是j,第i个人和第i-1个人是否相邻 的方案数。那么转移方程也很容易得出。

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    using namespace std;
    typedef long long ll;
    const ll P=7777777;
    int n;
    ll f[1010][1010][2];
    int main()
    {
    	f[2][1][1]=2;
    	int i,j;
    	scanf("%d",&n);
    	for(i=3;i<=n;i++)
    	{
    		for(j=0;j<i;j++)
    		{
    			f[i][j][0]=((i-j-2)*f[i-1][j][0]+(j+1)*f[i-1][j+1][0]+(i-j-1)*f[i-1][j][1]+(j)*f[i-1][j+1][1])%P;
    			if(j)	f[i][j][1]=(2*f[i-1][j-1][0]+f[i-1][j][1]+f[i-1][j-1][1])%P;
    		}
    	}
    	printf("%lld",f[n][0][0]);
    	return 0;
    }
     
  • 相关阅读:
    HDU1213How Many Tables并查集
    Redis新的存储模式diskstore
    GPFS文件系统笔记
    redis持久化
    360安全卫士qurl.f.360.cn分析
    [原创]解决DataSet的GetXml()方法空列不返回问题
    在多台服务器上简单实现Redis的数据主从复制
    史航416随笔
    史航416实验1总结
    史航416第二次作业总结
  • 原文地址:https://www.cnblogs.com/CQzhangyu/p/7747205.html
Copyright © 2011-2022 走看看