[Bzoj1925]&[SDOI2010]地精部落 DP
来源:互联网 发布:wpf 管理系统源码下载 编辑:程序博客网 时间:2024/04/28 20:41
题目链接:Bzoj1925 .
—————————————-
概述
题目大意如下。
给定一个数
其中,
—————————————-
分析
作为一个
首先明确一点,这是一个计数问题,应该可以
定义
对于
对于
对于
状态的含义讲完了,接下来是转移。假设当前序列不合法的数有
那么我们考虑不合法数的改变情况,可以得到如下转移:
dp[i+1][j]=dp[i+1][j]+dp[i][j] ;我们将
i+1 插入到当前序列的末尾或者最后一个数前面,这两个位置中一定有且仅有一个不会改变新序列不合法数的个数,而且能使新序列不合法数的个数不变的位置只可能是这两个之一。dp[i+1][j−1]=dp[i+1][j−1]+dp[i][j]∗j ;我们将
i+1 插入到当前序列不合法数的前面,可以使得新序列不合法数-1.dp[i+1][j+1]=dp[i+1][j+1]+dp[i][j]∗(i−j) ;我们将
i+1 插入到当前序列剩下的位置,可以使新序列不合法数+1.
转移就是这样,最后答案乘2即可。
—————————————-
代码
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>#define ll long long#define For(i, j, k) for(int i = j; i <= (int)k; ++ i)#define Forr(i, j, k) for(int i = j; i >= (int)k; -- i)#define INF 0x3f3f3f3fusing namespace std;const int maxn = 4200 + 5;int n;ll mo;ll dp[maxn][maxn];int main(){ scanf("%d%lld", &n, &mo); dp[1][0] = 1; For(i, 1, n) For(j, 0, i){ (dp[i+1][j] += dp[i][j]) %= mo; (dp[i+1][j-1] += dp[i][j]*j) %= mo; (dp[i+1][j+1] += dp[i][j]*(i-j)%mo) %= mo; } printf("%lld", (dp[n][0]<<1) % mo); return 0;}
—————————————-
小结
这题的方法其实还有很多,但是这一种比较简洁所以选择学一学,可能不太好理解吧。设好状态之后,解题的关键就是分位置讨论新的序列的不合法数,是道思维好题。
—————————————-
- bzoj1925 [Sdoi2010]地精部落(dp)
- [Bzoj1925]&[SDOI2010]地精部落 DP
- bzoj1925【sdoi2010】地精部落
- 【SDOI2010】【BZOJ1925】地精部落
- BZOJ1925: [Sdoi2010]地精部落
- bzoj1925: [Sdoi2010]地精部落
- bzoj1925: [Sdoi2010]地精部落
- bzoj1925 [Sdoi2010]地精部落
- [BZOJ1925][Sdoi2010]地精部落(抖动序列dp)
- DP [Sdoi2010]地精部落
- [BZOJ1925][SDOI2010]地精部落-动态规划
- bzoj1925 [Sdoi2010]地精部落(抖动序列)
- 【SDOI】【DP】【滚动数组】【bzoj1925】地精部落
- bzoj1925 地精部落
- BZOJ1925 地精部落
- bzoj 1925: [Sdoi2010]地精部落(dp)
- 【bozj 1925】[Sdoi2010]地精部落 (dp)
- bzoj 1925 [Sdoi2010]地精部落 dp
- Maven中的dependency的scope作用域详解
- 基于Flume+Log4j+Kafka的日志采集架构方案
- 请定义一个交通工具(Vehicle)的类,其中有: 属性:速度(speed),体积(size)等 方法:移动(move()),设置速度(setSpeed(int speed)),设置体积(set
- js中的window.onload与jQuery中的$(document).ready()的对比
- 排序算法(快排,希尔排序)
- [Bzoj1925]&[SDOI2010]地精部落 DP
- 利用requests 模拟登陆csdn
- Spring笔记
- 偏函数Demo
- Android N中如何配置system目录下文件默认权限
- Linux循环进入子目录执行make指令
- c语言strchr函数
- 使用bigdecimal来保留小数
- Java 反射