HDU 5151 Sit sit sit 区间dp
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5151
题解:
有n个椅子,编号为1到n。
现在有n个同学,编号为1到n,从第一个同学开始选择要坐的位子,并且这个同学不能坐同时满足下面三个条件的椅子。
1、左右都有相邻的位子
2、左右相邻的位子都是空的。
3、左右两边的位子颜色不同。
问总共有多少种坐法。
题解:
dp[i][j]表示坐满编号为i到j的椅子的类数。
现在第一个开始坐的人选择的是第t个位子,则dp[i][j]+=dp[i][t-1]*dp[t+1][j]*C[j-i][t-i],其中组合数C表示安排t-i个人在左边的组合数。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; typedef long long LL;
const int mod = 1e9 + ;
const int maxn = ; int n;
int arr[maxn];
LL dp[maxn][maxn],C[maxn][maxn]; void pre() {
C[][] = ;
for (int i = ; i < maxn; i++) {
C[i][] = ;
for (int j = ; j <= i; j++) {
C[i][j] = (C[i-][j - ] + C[i - ][j]) % mod;
}
}
} LL dfs(int i, int j) {
if (i == j) return dp[i][j] = ;
if (i > j) return ;
if (dp[i][j] != -) return dp[i][j];
LL &ret = dp[i][j] = ;
ret=(ret+dfs(i + , j)+dfs(i, j - ))%mod;
for (int mid = i + ; mid <= j - ; mid++) {
if (arr[mid - ] ^ arr[mid + ]) continue;
ret =(ret+dfs(i, mid - )*dfs(mid + , j)%mod*C[j - i][mid - i])%mod;
}
return ret;
} void init() {
memset(dp, -, sizeof(dp));
} int main() {
pre();
while (scanf("%d", &n) == && n) {
init();
for (int i = ; i <= n; i++) scanf("%d", arr + i);
LL ans=dfs(, n);
printf("%lld\n", ans);
}
return ;
}
HDU 5151 Sit sit sit 区间dp的更多相关文章
- hdu 4597 + uva 10891(一类区间dp)
题目链接:http://vjudge.net/problem/viewProblem.action?id=19461 思路:一类经典的博弈类区间dp,我们令dp[l][r]表示玩家A从区间[l, r] ...
- HDU 2476 String painter (区间DP)
题意:给出两个串a和b,一次只能将一个区间刷一次,问最少几次能让a=b 思路:首先考虑最坏的情况,就是先将一个空白字符串刷成b需要的次数,直接区间DP[i][j]表示i到j的最小次数. 再考虑把a变成 ...
- HDU 4597 Play Game(区间DP(记忆化搜索))
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4597 题目大意: 有两行卡片,每个卡片都有各自的权值. 两个人轮流取卡片,每次只能从任一行的左端或右端 ...
- hdu 5115 Dire Wolf(区间dp)
Problem Description Dire wolves, also known as Dark wolves, are extraordinarily large and powerful w ...
- HDU 2476 String painter(区间DP)
String painter Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 4745 Two Rabbits(区间DP,最长非连续回文子串)
Two Rabbits Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total ...
- HDU 5115 Dire Wolf ——(区间DP)
比赛的时候以为很难,其实就是一个区间DP= =..思路见:点我. 区间DP一定要记住先枚举区间长度啊= =~!因为区间dp都是由短的区间更新长的区间的,所以先把短的区间更新完.. 代码如下: #inc ...
- hdu 3632 A Captivating Match(区间dp)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3632 题意:n个人进行比赛,每个人有一个价值a[i],最后冠军只有一个,只能相邻两个人进行 ...
- HDU 3506 Monkey Party(区间DP)题解
题意:有n个石堆排成环,每次能合并相邻的两堆石头变成新石堆,代价为新石堆石子数,问最少的总代价是多少 思路:先看没排成环之前怎么做:用dp[i][j]表示合并i到j所需的最小代价,那么dp[i][j] ...
- HDU 5900 QSC and Master 区间DP
QSC and Master Problem Description Every school has some legends, Northeastern University is the s ...
随机推荐
- C++获取得到图片的坐标和rgb
#include <iostream> #include <fstream> #include <string> #include <windows.h> ...
- 【转】一个高端.NET技术人才的2014年度总结
[转]一个高端.NET技术人才的2014年度总结 本人在一家公司做技术负责人.主要从事的是.net方面的开发与管理,偏重开发. 弹指一挥间,时间飘然而过,转眼又是一年. 回顾2014年,是我人生中最 ...
- apache和IIS共享80端口问题
使用apache代理功能和IIS共享80端口的解决办法. 第一步:把iis所发布的网站默认端口由80改为8080: 第二步:修改apache的httpd.conf配置文件. 首先,要让apache支 ...
- Lua 的函数库 01
这里只介绍和插件编写比较有关的几个函数. 详细的Lua手册请参照Lua Reference Manual 5.1. table函数库 一部分的table函数只对其数组部分产生影响, 而另一部分则对整个 ...
- 打印日志 Log
Log.v(tag,msg);所有内容 Log.d(tag,msg);debug Log.i(tag,msg);一般信息 Log.w(tag,msg);警告信息 Log.e(tag,msg);错误信息
- DOS下更改编码方式
使用CHCP命令,CHCP是Change Code Page的缩写. 936 简体中文GBK 437 美国英语 65001 UTF编码 如:chcp 65001则将dos窗口中的字符编码改为UTF编码 ...
- STM32F0xx_TIM输出PWM配置详细过程
前言 前面我说过STM32的定时器功能很强大,今天就来总结一下它的另外一个“强大”功能:TIM的比较输出功能,输出可调PWM波形.直接调用函数接口“TIM2_CH1_PWM(uint32_t Freq ...
- 【转】Hibernate入门实例
1. 环境配置 1.1 hiberante环境配置 hibernate可实现面向对象的数据存储.hibernate的官网:http://hibernate.org/ 官网上选择hibernate OR ...
- 菜鸟学习Spring——60s利用JoinPoint获取参数的值和方法名称
一.概述 AOP的实现方法在上两篇博客中已经用了两种方法来实现现在的问题来了虽然我们利用AOP,那么客户端如何信息传递?利用JoinPoint接口来实现客户端给具体实现类的传递参数. 二.代码演示. ...
- ORACLE-用户常用数据字典的查询使用方法
一.用户 查看当前用户的缺省表空间 SQL> select username,default_tablespace from user_users; USERNAME DEFAULT_TABLE ...