HDU 5151 Sit sit sit(区间DP)
来源:互联网 发布:final java关键字 编辑:程序博客网 时间:2024/06/05 09:22
HDU 5151 Sit sit sit
题目链接
区间DP+组合计数问题,转移方程为,每次选当前区间最后一个放的位置,然后乘上组合数C[区间长度][左区间长度]
代码:
#include <cstdio>#include <cstring>typedef long long ll;const ll MOD = 1000000007;const int N = 105;int n, a[N];ll dp[N][N], C[N][N];int main() { C[1][0] = C[1][1] = 1; for (int i = 2; i <= 100; i++) {C[i][0] = C[i][i] = 1;for (int j = 1; j < i; j++) { C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % MOD;} } while (~scanf("%d", &n)) {for (int i = 1; i <= n; i++) scanf("%d", &a[i]);memset(dp, 0, sizeof(dp));for (int i = 1; i <= n; i++) dp[i][i] = 1;for (int len = 1; len < n; len++) { for (int l = 1; l + len <= n; l++) {int r = l + len;for (int k = l; k <= r; k++) { if (l == k) dp[l][r] = (dp[l][r] + dp[k + 1][r]) % MOD; else if (r == k) dp[l][r] = (dp[l][r] + dp[l][k - 1]) % MOD; else if (a[k - 1] == a[k + 1]) dp[l][r] = (dp[l][r] + (dp[l][k - 1] * dp[k + 1][r] % MOD * C[r - l][k - l]) % MOD) % MOD;} }}printf("%lld\n", dp[1][n]); } return 0;}
0 0
- HDU 5151 Sit sit sit (区间DP)
- hdu 5151 Sit sit sit(区间dp)
- HDU 5151 Sit sit sit(区间DP)
- 【HDU】5151 Sit Sit Sit(区间DP+排列组合)
- hdu 5151 Sit sit sit(区间DP+组合数学)
- hdu 5151 Sit sit sit(DP)
- HDU 5151Sit sit sit
- hdu5151 Sit sit sit 区间DP
- 【DP】 HDOJ 5151 Sit sit sit
- HDU5151 Sit Sit Sit(区间DP+排列组合)
- SIT
- sit
- SIT UAT
- SIT和UAT区别
- SIT-系统集成测试
- SIT计划--自动作业判定
- SIT与UAT的分别
- SIT与UAT的区别
- tomcat性能优化及其jvm内存分析
- canvas下雪效果
- 程序中变量分布的区域总结 堆 栈 字符常量区 全局数据区 静态存储区
- 反渗透设备:反渗透设备主要特点及应用情况概述
- Quartz 2D编程指南(三)路径 path
- HDU 5151 Sit sit sit(区间DP)
- spin_lock & mutex_lock的区别
- Java注释@interface的用法
- cocos2d-x (音效音乐)SimpleAudioEngine
- UVALIVE 3971<最大化最小值>
- TCP Loop Connect
- 音乐类软件LoveMusic开发(二)----基本架构
- PHP5.5 配置 Apache2.4 + MySQL5.6
- mysql数据库中实现内连接、左连接、右连接