【BZOJ3193】[JLOI2013]地形生成 DP
【BZOJ3193】[JLOI2013]地形生成
Description
Input
Output
Sample Input
1 2
2 2
Sample Output
HINT
对于所有的数据,有1<=N<=1000,所有的数字都是不大于109的正整数。
题解:显然,我们的思路是将所有山按高度排序,然后从大到小扔到序列中去。那么第一问就做完了,考虑第二问。
因为山的高度相同但是关键值不同,那么我们可以认为规定:对于相同高度的山,关键值大的排在关键值小的后面,这样很巧妙的避免了重复。那么直接DP,用f[i]表示在相同高度的山中,最后一个的位置是i的方案数,O(n^2)转移即可。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=1010;
const int mod=2011;
int n,ans,sum,last;
struct node
{
int h,k;
}p[maxn];
int f[maxn];
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
bool cmp2(node a,node b)
{
return (a.h==b.h)?(a.k<b.k):(a.h>b.h);
}
int main()
{
n=rd();
int i,j;
for(i=1;i<=n;i++) p[i].h=rd(),p[i].k=rd();
sort(p+1,p+n+1,cmp2),p[0].h=1<<30;
for(ans=i=1;i<=n;i++)
{
if(p[i].h<p[i-1].h) j=0;
ans=ans*min(i,p[i].k+j)%mod,j++;
}
printf("%d ",ans);
f[0]=1;
for(ans=i=1;i<=n;i++)
{
if(p[i].h<p[i-1].h)
{
last=i-1;
for(sum=0,j=0;j<=last;j++) sum=(sum+f[j])%mod;
memset(f,0,sizeof(f));
for(j=0;j<p[i].k&&j<=last;j++) f[j]=sum;
}
else
{
for(sum=0,j=0;j<p[i].k&&j<=last;j++) sum=(sum+f[j])%mod,f[j]=sum;
}
}
for(sum=0,i=0;i<=n;i++) sum=(sum+f[i])%mod;
printf("%d",sum);
return 0;
}
【BZOJ3193】[JLOI2013]地形生成 DP的更多相关文章
- [Bzoj3193][JLOI2013]地形生成 (排列组合 + DP)
3193: [JLOI2013]地形生成 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 459 Solved: 223[Submit][Status ...
- [bzoj3193][JLOI2013]地形生成_排列组合_贪心
[JLOI2013]地形生成 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3193 题解: 这种求总排列的题,一种常规做法就是所有的元素 ...
- BZOJ3193 [JLOI2013]地形生成 【dp】
题目链接 BZOJ3193 题解 注意\(key\)是小于 第一问,显然按高度降序排序,逐个插入 如果高度各不相同,那么之前插入的都比当前插入的\(i\)大,可插入的位置个数就确定了 由于存在高度相同 ...
- BZOJ3193: [JLOI2013]地形生成
传送门 Sol 第一问可以考虑按照山的高度从大到小放 但是这样如果遇到高度相同的就不好考虑,那么同时要求数量限制从小到大 这样每次放的时候后面的一定不会影响前面,并且高度相同的时候前面能放的位置后面的 ...
- 【BZOJ3193】 [JLOI2013]地形生成
BZOJ3193 [JLOI2013]地形生成 Solution 第一问不是很简单吗? 直接计数就好了. 第二问思考无果看了看hyj神仙的代码,发现可以dp求解. 具体可以看代码(其实主要是我说不清楚 ...
- 【BZOJ3193】[JLOI2013]地形生成(动态规划)
[BZOJ3193][JLOI2013]地形生成(动态规划) 题面 BZOJ 洛谷 题解 第一问不难,首先按照山的高度从大往小排序,这样子只需要抉择前面有几座山就好了.然而有高度相同的山.其实也不麻烦 ...
- [JLOI2013]地形生成
JLOI2013过了好长时间,才写第四题.. 第一问比较好想. 第二问我想到了n^3次方的做法,但是数据....于是没敢写,然后上网查了一下题解,居然是O(n^3)过的,数据这么弱... /* * P ...
- luoguP3255 [JLOI2013]地形生成 动态规划
出题人语文真好... 各不相同的标号和高度 = 各不相同的标号 + 单独的高度... 第一问比较简单,考虑从大到小插入,在相同情况下,按关键值从小到大插入 这样子,关键大的元素一定会影响到关键小的元素 ...
- [JLOI2013]地形生成[组合计数]
题意 \(n\) 元素各有一个高度 \(h\) 和关键数字 \(b\) .求有多少个下标序列和高度序列,满足对任意 \(i\),\(j< i\) 且 \(h_j < h_i\)的 \(j\ ...
随机推荐
- 快速沃尔什变换 FWT
FWT 是处理位运算卷积的有效工具…… 原理……不懂,但背板子很简单,在这贴博客是为了放个模板,免得到时候忘记. 其中0为或卷积,1为与卷积,2为异或卷积…… void FWT(long long a ...
- 【CF713C】Sonya and Problem Wihtout a Legend(离散化,DP)
题意:给你一个数列,对于每个数字你都可以++或者−− 然后花费就是你修改后和原数字的差值,然后问你修改成一个严格递增的,最小花费 思路:很久以前做过一道一模一样的 严格递增很难处理,就转化为非严格递增 ...
- 一款多功能的移动端滚动选择器,支持单选到多选、支持多级级联、提供自定义回调函数、提供update函数二次渲染、重定位函数、兼容pc端拖拽等等..
https://github.com/onlyhom/mobileSelect.js/blob/master/docs/README-CN.md mobileSelect.js 一款多功能的移动端滚动 ...
- 转 PHP 使用 Redis
PHP 使用 Redis PHP 使用 Redis 安装 开始在 PHP 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP ...
- Go语言入门——数组、切片和映射(下)
上篇主要介绍了Go语言里面常见的复合数据类型的声明和初始化. 这篇主要针对数组.切片和映射这些复合数据类型从其他几个方面介绍比较下. 1.遍历 不管是数组.切片还是映射结构,都是一种集合类型,要从这些 ...
- deferred 对象
转载,原文连接:http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html ...
- POJ1430 Binary Stirling Numbers
@(POJ)[Stirling數, 排列組合, 數形結合] Description The Stirling number of the second kind S(n, m) stands for ...
- Apple激活日期查询
需要输入的信息为苹果产品的序列号 查看您的保修服务和支持期限 - Apple 支持 或者通过果粉查询网站获取结果
- Interface Builder中的技巧
在我工作中经常会遇到有人吐槽Xcode中的interface builder(以下简称IB)不好用的开发者.在我看来,IB是一个非常棒的可视化开发工具,可以非常快捷的设置UI控件的大部分常用属性.下面 ...
- 【报错】项目启动部署时报错:java.lang.NoSuchMethodError
报错: ================================================================================================ ...