Codeforces Round #266 (Div. 2)D(DP)
来源:互联网 发布:bbc news软件下载 编辑:程序博客网 时间:2024/06/13 12:03
题意:选择若干个不重复的区间执行+1操作,求有多少种方法使得序列都是
莫名的感觉此题出的好。第一次发现可以用dp计算非常复杂的方案数,而且方案看视非常复杂。
貌似该题有多种解法:copyhttp://blog.csdn.net/rowanhaoa/article/details/39343525
http://blog.csdn.net/u011345136/article/details/39315889
以后再消化。。。。。。。
思路:DP[i][j]表示到第i个位置,前面还有j个点未被选(不包括i)
1. a[i]+j==h 表示可以从前面j个点中任意选一个点与i匹配或者不选
2. a[i]+j+1==h 表示可以从前面j个点以及i中任意选一个点i匹配或者不选
我们这样可以把一种方案的步骤细分,分成每一个状态。
我们这样可以把一种方案的步骤细分,分成每一个状态。
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;const int M= 1e9+7;int a[2010];int d[2010][2010];int m,n;int dfs(int cur,long long left){if(d[cur][left])return d[cur][left];if(cur==n){if(left==0)return d[cur][left]=1;return d[cur][left]=0;}if(left==m-a[cur]) {return d[cur][left]=((left*dfs(cur+1,left-1)%M)+dfs(cur+1,left))%M;}else if(left+1==m-a[cur]){return d[cur][left]=(((left+1)*dfs(cur+1,left)%M)+dfs(cur+1,left+1))%M;}return 0;}int main(){int i,j,k;while(scanf("%d%d",&n,&m)!=EOF){memset(d,0,sizeof(d));for(i=0;i<n;i++)scanf("%d",&a[i]);printf("%d\n",dfs(0,0));}}
0 0
- Codeforces Round #266 (Div. 2)D(DP)
- Codeforces Round #266 (Div. 2)D(DP)
- Codeforces Round #273 (Div. 2)D dp
- Codeforces Round #358 (Div. 2) D dp
- Codeforces Round #263 (Div. 2)D(树形DP)
- Codeforces Round #264 (Div. 2)D(图论+dp)
- Codeforces Round #244 (Div. 2)D(字符串DP)
- Codeforces Round #301 (Div. 2)D (概率dp)
- Codeforces Round #301 (Div. 2) D(概率dp)
- Codeforces Round #336 (Div. 2) D. Zuma(区间dp)
- Codeforces Round #273 (Div. 2)(D)dp,滚动数组
- Codeforces Round #362 (Div. 2) D Puzzles (DP)
- Codeforces Round #271 (Div. 2) D. Flowers(DP)
- Codeforces Round #424 (Div. 2) D. Office Keys(dp)
- Codeforces Round #336 (Div. 2)-D Zuma(区间DP)
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2) D. Minimization(dp)
- Codeforces Beta Round #35 (Div. 2), problem: (D) Animals DP
- Codeforces Round #236 (Div. 2)D题 Upgrading Array ;dp
- 黑马程序员--IO流中使用字节流复制文件的效率比较
- android端Jackson解析json
- JDBC 使用以及注意问题
- I/O 多路复用之select
- C语言函数相关
- Codeforces Round #266 (Div. 2)D(DP)
- Codeforces Round #Pi (Div. 2) ABCD
- android------HttpURLConnection用法
- 最小和
- Kernel KNN ( K-Nearest Neighbors )
- gulp将请求转为请求本地JSON
- C语言多级指针
- Leetcode45 Jump Game II
- poj 3264 线段树区间最大最小值