zoukankan      html  css  js  c++  java
  • HDU 5151 Sit sit sit


    题目链接

    n个人依次坐n把椅子,一个人不会做满足以下条件的椅子
    1.这把椅子左右都有椅子
    2.这把椅子左右椅子上都有人
    3.这把椅子左右椅子颜色不同
    问坐满的方案数

    当l==r时,根据是否合法返回0或1
    其他情况枚举当前坐的椅子位置k
    (dp[l][r]=dp[l][k-1]*dp[k+1][r]*C(k-l,r-l))
    (左右人坐下的顺序可以交替)

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    using namespace std;
    typedef long long LL;
    const int mod = 1000000007;
    int n, col[105];
    int f[105][105];
    int fact[105], inv[105];
    void ModAdd(int & x, int y) {
    	x += y;
    	if(x >= mod) x -= mod;
    }
    int C(int x, int y) {
    	return (LL)fact[y] * inv[x] % mod * inv[y - x] % mod;
    }
    int power(int x, int y) {
    	int res = 1;
    	while(y) {
    		if(y & 1) res = (LL) res * x % mod;
    		x = (LL) x * x % mod;
    		y >>= 1;
    	}
    	return res;
    }
    int DP(int l, int r) {
    	int lcol = col[l - 1], rcol = col[r + 1];
    	if(l == r) {
    		if(lcol == -1 || rcol == -1) return 1;
    		if(lcol != rcol) return 0;
    		return 1;
    	}
    	int & res = f[l][r];
    	if(res != -1) return res;
    	res = 0;
    	ModAdd(res, DP(l + 1, r));
    	ModAdd(res, DP(l, r - 1));
    	for(int i = l + 1; i < r; i++) {
    		ModAdd(res, 
    	    (LL)DP(l, i - 1) * DP(i + 1, r) % mod * C(i - l, r - l) % mod);
    	}
    	return res;
    }
    int main() {
    	fact[0] = 1;
    	for(int i = 1; i <= 100; i++) 
    	fact[i] = (LL) fact[i - 1] * i % mod;
    	inv[100] = power(fact[100], mod - 2);
    	for(int i = 99; i >= 0; i--) 
    	inv[i] = (LL) inv[i + 1] * (i + 1) % mod;
    	while(scanf("%d", &n) != EOF) {
    		for(int i = 1; i <= n; i++) scanf("%d", &col[i]);
    		memset(f, -1, sizeof(f));
    		col[0] = col[n + 1] = -1;
    		printf("%d
    ", DP(1, n));
    	}
    	return 0;
    }
    
  • 相关阅读:
    2017 ACM-ICPC西安网赛B-Coin
    Codeforces389D(SummerTrainingDay01-J)
    Codeforces672D(SummerTrainingDay01-I)
    VS2017.滚动条选项
    VS.自动调试
    ffmpeg.mp4.格式资料
    vs2017.unresolved external symbol __imp__fprintf&__imp____iob_func
    vs2017."const char *"的实参与"char *"的形参不兼容_goto跳过类型声明
    vue项目开发时怎么解决跨域
    vue奇怪的知识点又增加了
  • 原文地址:https://www.cnblogs.com/ljzalc1022/p/9064502.html
Copyright © 2011-2022 走看看