UVALive 6486 Skyscrapers 简单动态规划
题意:
有N个格子排成一排,在每个格子里填上1到N的数(每个只能填一次),分别代表每个格子的高度。现在给你两个数left和right,分别表示从左往右看,和从右往左看,能看到的格子数。问有多少种情况。
数据范围: N<5000;
思路:
首先枚举最高的一块,在最高的格子的后面的格子都一定会被挡住。所以,除了最高的那一格之外,从左边能看到的格子,从右边一定看不到;从右边能看到的也是一样。
因此,除了最高的那个格子,左边的是否能被看见,和右边的无关。所以,我们可以以最高的格子为界,把这一排格子分成左右两部分。
在这样子,我们就可以把左边和右边看成是一种情况:把n个高度不等的方块排成一列,要求从前面只能看到k个,有多少种。
我们把上面问题(n个格子,看见k个)的结果记为f[n, k]。
对于上面那个问题,我们考虑两种情况:最高的放在最后,和最高的不放在最后。
1. 如果最高的放最后,因为最高的一定不会被挡住,所以,前面n-1个格子,需要被看见k-1个。
2. 如果最高的不放在最后,那么,最后一格一定会被挡住(因为最高的在它前面,而且会挡住他),所以前面n-1个格子,仍然需要被看见k个。
上面第一种,情况只有一种;而第二种情况有n-1种(把n-1个不是最高的中任意一个放到最后都满足)。
所以 f[n, k] = f[n-1, k-1] + (n-1)*f[n-1, k]。
另外就是边界情况,k=1的时候,这样一定就是最高的放最前面,后面随便放,所以就是 f[n, 1] = (n-1)!。
还有就是,组合数可以用杨辉三角来求,这个是学弟说的,本人数学功底太差 0 0、
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; typedef long long ll;
const int MAXN = ;
const ll MOD = (ll)1e9+7.0; ll dp[MAXN][MAXN];
ll C[MAXN][MAXN];
ll ni[MAXN]; int n, l, r;
ll ans; int main()
{
#ifdef Phantom01
freopen("in.txt", "r", stdin);
freopen("my.out", "w", stdout);
#endif // Phantom01 dp[][] = dp[][] = ;
for (int i = ; i < MAXN; i++)
dp[][i] = dp[i][] = ;
for (int i = ; i < MAXN; i++)
dp[i][] = (dp[i-][]*(i-))%MOD;
for (int i = ; i < MAXN; i++)
for (int j = ; j < MAXN; j++)
dp[i][j] = (dp[i-][j-]+(dp[i-][j]*(i-))%MOD)%MOD; for (int i = ; i < MAXN; i++) {
C[i][] = ;
for (int j = ; j <= i; j++)
C[i][j] = (C[i-][j]+C[i-][j-])%MOD;
} while (scanf("%d%d%d", &n, &l, &r)!=EOF) {
if (!(n||l||r)) break;
ans = ;
if ((l+r)<=(n+)) {
for (int i = l; i <= (n-r+); i++) {
ans = (ans+( ( (dp[i-][l-]*dp[n-i][r-])%MOD) *C[n-][i-])%MOD)%MOD;
}
}
printf("%d\n", (int)ans);
}
return ;
}
UVALive 6486 Skyscrapers 简单动态规划的更多相关文章
- 简单动态规划——三逆数的O(N^2)解法!
[算法]简单动态规划——三逆数的O(N^2)解法! 问题描述: 三逆数定义:给一个数的序列A[0,1,....N-1]),当i<j<k且A[i]>A[j]>A[k]时,称作ai ...
- 简单动态规划-LeetCode198
题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...
- POJ 1163 The Triangle(简单动态规划)
http://poj.org/problem?id=1163 The Triangle Time Limit: 1000MS Memory Limit: 10000K Total Submissi ...
- 【算法】简单动态规划——三逆数的O(N^2)解法!
问题描述: 三逆数定义:给一个数的序列A[0,1,....N-1]),当i<j<k且A[i]>A[j]>A[k]时,称作ai,aj,ak为一个三逆数. 现在给定一个长度为N的数 ...
- 51nod 1270 数组的最大代价 思路:简单动态规划
这题是看起来很复杂,但是换个思路就简单了的题目. 首先每个点要么取b[i],要么取1,因为取中间值毫无意义,不能增加最大代价S. 用一个二维数组做动态规划就很简单了. dp[i][0]表示第i个点取1 ...
- HDU 1176 免费馅饼 简单动态规划
世道很简单的动态规划,但是却错了,让我很无语,改来改去还是不对,第二天有写就对了,之后我就耐着性子慢慢比较之前的错误代码,发现 第一次错:纯粹用了a[i][j]+=max3(a[i+1][j-1], ...
- HDUOJ----2571(命运)(简单动态规划)
命运 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- 338. Counting Bits_比特位计数_简单动态规划
https://leetcode.com/problems/counting-bits/ 这是初步了解动态规划后做的第一道题,体验还不错... 看完题目要求后,写出前10个数的二进制数,发现了以下规律 ...
- hdu1176--免费馅饼(简单动态规划)
都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内.馅饼如果掉在了地上当然就 ...
随机推荐
- LR编写post请求
函数列表: web_submit_data(); web_custom_request(); web_get_int_property(); 1.web_submit_data(); 2.web_cu ...
- OSI概述问答
1. 网络中体系结构的七层.四层.五层是怎么回事? OSI(Open System Interconnection)开放系统互连参考模型的七层协议体系结构:概念清楚,理论比较完整,但既复杂又不用 ...
- ueditor 编辑器,自定义图片上传
<div> <h1>完整demo</h1> <form method="post" name="form"> & ...
- [BZOJ3673&3674]可持久化并查集&加强版
题目大意:让你实现一个可持久化的并查集(3674强制在线). 解题思路:刚刚介绍了一个叫rope的神器:我是刘邦,在这两题(实际上两题没什么区别)就派上用场了. 正解应该是主席树||可持久化平衡树,然 ...
- HDFS架构与原理
HDFS HDFS 全称hadoop分布式文件系统,其最主要的作用是作为 Hadoop 生态中各系统的存储服务 特点 优点 • 高容错.高可用.高扩展 -数据冗余多副本,副本丢失后自动恢复 -Name ...
- 学习Keras:《Keras快速上手基于Python的深度学习实战》PDF代码+mobi
有一定Python和TensorFlow基础的人看应该很容易,各领域的应用,但比较广泛,不深刻,讲硬件的部分可以作为入门人的参考. <Keras快速上手基于Python的深度学习实战>系统 ...
- python学习笔记:第九天
Linux学习 1.linux虚拟机安装: 1.1win10-64为系统:链接:https://pan.baidu.com/s/1Wz8U1B_OMLaYlYr_SC75Zw 提取码:fe9k ,有U ...
- Windows和Linux的编译理解
Windows一般编译出来的x86的软件,就是只能在x86的系统上才能运行,同理,在x64系统上也是一样的道理. Linux利用gcc编译器编译,可以在Linux上面运行,但是想要在嵌入式系统上运行的 ...
- LightOJ - 1132 Summing up Powers 矩阵高速幂
题目大意:求(1^K + 2^K + 3K + - + N^K) % 2^32 解题思路: 借用别人的图 能够先打表,求出Cnm,用杨辉三角能够高速得到 #include<cstdio> ...
- rpm -qf 的使用技巧,以及怎样查找软件包
首先查看安装的软件包,或者时候安装有某某软件包的命令 rpm (-qa)| grep 软件名 root@mode oldboy]# rpm -qa| grep openssl openssl-dev ...