Codeforces 14E Camels (DP)
来源:互联网 发布:linux mmap 共享内存 编辑:程序博客网 时间:2024/05/09 21:27
题意:给你一个数N,从1到N形成t个波峰和t-1个波谷,总共有多少种情况。
思路:将问题分解为求2*t-1个转折点,设dp[x][y][t]为当最后一点落在(x,y)上时,出现t个转折点的总数。那么对于当前点有两种情况,他的前一个点到当前点要么高度比他大,要么比他小。若当前点(x,y)之前出现了t个转折点,若t为偶数,也就是说只要前一个点落点在当前点的下方,当前状态要想保持任然只出现偶数t个转折点的情况,则dp[x][y][t]=∑(dp[x-1][h][t])(1<=h<y),同时只要前一个点落在当前点的上方,都可以达到dp[x][y][t+1]=∑(dp[x][h][t])(y<h<=4);当t为奇数时,同样的,dp[x][y][t]=∑(dp[x-1][h][t])(y<h<=4),dp[x][y][t+1]=∑(dp[x-1][h][t])(1<=h<y);当然,对于最开始的转折点一定是上升的。
#include <iostream>#include <cstdio>#include <cstring>using namespace std;int dp[22][4][22];int main(){ memset(dp,0,sizeof(dp)); for(int i=1;i<=3;i++) dp[1][i][0]=1; for(int x=2;x<22;x++) for(int y=1;y<=4;y++) for(int t=0;t<21;t++) for(int h=1;h<=4;h++) { if(x==2) { if(y>h) { if(t%2) dp[2][y][t+1]+=dp[1][h][t]; else dp[2][y][t]+=dp[1][h][t]; } } else { if(t%2) { if(h>y) dp[x][y][t]+=dp[x-1][h][t]; else if(h<y) dp[x][y][t+1]+=dp[x-1][h][t]; } else { if(h<y) dp[x][y][t]+=dp[x-1][h][t]; else if(h>y) dp[x][y][t+1]+=dp[x-1][h][t]; } } } int n,t; while(cin>>n>>t) { if(1+2*t>n||n>6*t+1) {cout<<"0"<<endl;continue;} int ans=0; for(int i=1;i<=4;i++) ans+=dp[n][i][2*t-1]; cout<<ans<<endl; } return 0;}
- Codeforces 14E Camels (DP)
- codeforces 14E Camels (计数类dp)
- CodeForces 14 E.Camels(dp)
- CF-14E - Camels(DP)
- CodeForces 14 E - Camels && D - Two Paths
- Codeforces Beta Round #14 (Div. 2) E. Camels
- 【dp】codeforces 83E
- codeforces-731E-dp
- Codeforces 748E dp
- Codeforces 722E [DP]
- Codeforces 416E DP
- codeforces 526E E. Transmitting Levels(dp)
- Codeforces 838E E. Convex Countour DP
- codeforces 215E 数位DP
- codeforces 23E 树形DP
- CodeForces 215E 数位DP
- codeforces 23E 树形DP
- codeforces 148E Porcelain (dp)
- C# 打开文件夹并遍历里面的文件
- 多线程:线程的返回retrun和pthread_exit
- 推进水资源信息化建设 落实最严格的水资源管理制度
- 母函数
- LNK2005...already defined...ERROR
- Codeforces 14E Camels (DP)
- 编程语言叛逃路线
- UVA 321 - The New Villa
- Vim中文输入法插件——VimIM
- S3C6410系统时钟
- UML基础知识
- Debian 6.0.6 系统安装第十步: 安装SSH
- JAVA -Cookie和Session专题
- UVA 10422 - Knights in FEN