UVA 1638- Pole Arrangement(动态规划)
来源:互联网 发布:nginx php 空白 编辑:程序博客网 时间:2024/05/17 19:17
原题链接:点击打开链接
题意:给出n根高度为1,2,3,---n的杆子,从左边能看到l根,右边能够看到r根,问有多少种可能
依据紫书的思路 先假设已经安排好了高度为2---i的杆子,
那么高度为1的杆子的放置方法有三种情况
放在最左边:从左边看得见,右边看不见
放在最右边:从右边看得见,左边看不见
放在中间,有i-2个空位可以插,左右都看不见
所以可以写出递推关系:
dp[i][j][k]=dp[i-1][j-1][k]+dpi-1][j][k-1]+dpi-1][j][k]*(i-2);
/************************************************************************* > File Name: 1638.cpp > Author: Clannad > Mail: 821199012@qq.com > Created Time: Tue 12 July 2016 11:57:28 PM************************************************************************/#include <vector>#include <map>#include <set>#include <queue>#include <stack>#include <algorithm>#include <sstream>#include <iostream>#include <cstdio>#include <cmath>#include <cstdlib>#include <cstring>#include<string>#include <ctime>using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int maxn=25;int T,n,l,r;ll dp[maxn][maxn][maxn];/*转移为dp[i][l][r] = dp[i-1][l-1][r] + dp[i-1][l][r-1] + (i-2)*dp[i-1][l][r]*/int main(){// std::ios::sync_with_stdio(false);// #ifndef ONLINE_JUDGE// freopen("in.txt", "r", stdin);// #endif cin>>T; while(T--){ cin>>n>>l>>r; memset(dp,0,sizeof(dp)); dp[1][1][1]=1; for(int i=2 ; i<=n ; i++) for(int j=1 ; j<=l ; j++) for(int k=1 ; k<=r ; k++){ dp[i][j][k]=dp[i-1][j-1][k]+dp[i-1][j][k-1]+(i-2)*dp[i-1][j][k]; } cout<<dp[n][l][r]<<endl; } return 0;}
注:虽然理解了公式,但是刚开始边界写了有点烦,后来想了一下其实只需要d[1][1][1],其余的都初始化为0就可以了。
加油------------
0 0
- UVA 1638- Pole Arrangement(动态规划)
- UVa 1638-Pole Arrangement
- UVa 1638 Pole Arrangement
- uva 1638 Pole Arrangement
- UVa 1638 Pole Arrangement
- UVA 1638 Pole Arrangement
- uva 1638 Pole Arrangement
- Uva 1638 Pole Arrangement DP
- UVA 1638 - Pole Arrangement (dp计数)
- uva 1638 Pole Arrangement 递推
- UVALive 6117 (LA 6117) Pole Arrangement 动态规划
- 1638 - Pole Arrangement (递推)
- uva 1638 Pole Arrangement (有多少种可能?)
- Uva 1638 Pole Arrangement 数学,递推,dp
- UVA 1608 Pole Arrangement(递推)
- UVA 1638(动态规划)
- UVa1638 Pole Arrangement 递推
- 动态规划,递推(杆子的排列,uva 1638)
- Leetcode 217. Contains Duplicate (Easy) (cpp)
- 关于nodejs的npm命令无反应的解决方案
- where子句的使用
- mitmproxy
- smarty与MVC在应用中各自的优缺点
- UVA 1638- Pole Arrangement(动态规划)
- git
- FILE文件流的中fopen、fread、fseek、fclose的使用
- Linux串口编程(向空调发送十六进制指令)
- 基于RESTful Web Service 的Jersey框架与Spring完美整合
- FastDFS的Tracker Server-tracker.conf 配置说明
- 318. Maximum Product of Word Lengths
- QT线程编程-串口收发
- PAT乙级练习题B1047. 编程团体赛