zoukankan      html  css  js  c++  java
  • 洛谷 [P3205] 合唱队

    区间DP

    手动模拟一下,我们发现本题就是一个左右加数的区间DP

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cstdlib>
    #include <cmath>
    using namespace std;
    const int MAXN = 1005, MOD = 19650827;
    int num[MAXN], dp[MAXN][MAXN][2], n;
    int main() {
    	cin >> n;
    	for(int i = 1; i <= n; i++) cin >> num[i], dp[i][i][0] = 1;
    	for(int k = 2; k <= n; k++) {
    		for(int i = 1; i + k - 1 <= n; i++) {
    			int j = i + k - 1;
    			if(num[j] > num[j - 1]) dp[i][j][1] += dp[i][j - 1][1];
    			if(num[j] > num[i]) dp[i][j][1] += dp[i][j - 1][0];
    			if(num[i] < num[i + 1]) dp[i][j][0] += dp[i + 1][j][0];
    			if(num[i] < num[j]) dp[i][j][0] += dp[i + 1][j][1];
    			dp[i][j][1] %= MOD; dp[i][j][0] %= MOD;
    		}
    	}
    	printf("%d
    ", (dp[1][n][0] + dp[1][n][1]) % MOD);
    	return 0;
    }
    
    
  • 相关阅读:
    AcWing
    AcWing
    AcWing
    AcWing
    AcWing
    2019牛客国庆集训派对day1
    模板
    2019南昌网络赛H The Nth Item 矩阵快速幂
    ACwing92 递归实现指数型枚举 dfs
    ACwing91 最短Hamilton路径 状压dp
  • 原文地址:https://www.cnblogs.com/Mr-WolframsMgcBox/p/8602308.html
Copyright © 2011-2022 走看看