先考虑第一个问题(先假设没有山高度相同)

我们把所有山按高度从大到小排序,设这个集合为S,设一个空集合为V,

我们把山按顺序放入集合V。

考虑第i座山插进去的时候能放的位置,因为现在前面有i - 1座山比它高,再加上本来的第i个位置,它一共有i个位置可以放。这个山的关键值如果为k,它只能在前min(k,i)个位置里挑。

所以第i个山的放的位置的组合为ci = min(k,i)种。ans = c1 * c2 …… * cn;

但是我们现在有山的高度相同,且关键值不同。两座高度相同的山能放的最靠后的位置,一定是关键值大的那个越靠后。所以我们先按高度从大到小,然后高度相同的关键值从小到大排序出S集合。

设[x,y]这段区间的山高度相同。所以 ci = min(x,k) + i - x。因为一座山在满足关键值的情况下,可以也放在高度相同的山前面。

所以最后 得出 ans1 = c1 * c2 …… * cn;

接下来为第二个问题:
我们每次都把高度相同的一起加入,
我们考虑把这个问题转化成最经典的球盒模型,大致能搞成这个样子:
把n个没有标号的球放进m个盒子里,允许有盒子为空,但是第i个球只能放到前pi个盒子里,我们把pi从小到大排序后,可以强行规定pi小的只能出现在pi大的球之前,这样就变成了无标号的了。

于是就有一个dp,设f[i][j]表示第i个球严格放在第j个盒子里的方案数

f[i][j]=∑k=1~j f[i-1][k] 
因为f[i][j-1]=∑k=1~j-1 f[i-1][k]
所以f[i][j] = f[i - 1][j] + f[i][j - 1] 
我们再用滚动数组,得最终方程
f[i]=f[i]+f[i-1]
[x,y]这一段的方案数为c= f[1] + f[2] +……f[min(a[y].key,x) ]
最后再将每个c连乘就可以啦

*以上部分经过他人借见,感谢!

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
struct node{int h,key;}a[1005];
const int mod=2011;
int n,f[1005];
bool cmp(const node &a,const node &b){return a.h>b.h||(a.h==b.h&&a.key<b.key);}
void work1()
{int i,j,k;sort(a+1,a+n+1,cmp);int num=0,ans1=1;for(i=1;i<=n;i++){if(a[i].h!=a[i-1].h)num=i;//num记录相同高度的一段的开头 ans1=(ans1*(min(a[i].key,num)+i-num))%mod;}printf("%d ",ans1);
}
void work2()
{int i,j,k,pos,sum,ans2=1;for(i=1;i<=n;i=pos+1){memset(f,0,sizeof(f));f[1]=1;pos=i;while(pos<=n&&a[i].h==a[pos].h)pos++;pos--;//a[i].h~a[pos].h相同 for(j=i;j<=pos;j++)for(k=2;k<=min(a[j].key,i);k++)f[k]=(f[k-1]+f[k])%mod;sum=0;for(j=1;j<=min(a[pos].key,i);j++)sum=(sum+f[j])%mod;ans2=(ans2*sum)%mod;   }printf("%d",ans2);
}
int main()
{int i,j,k;scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d%d",&a[i].h,&a[i].key);work1();work2();return 0;
}

转载于:https://www.cnblogs.com/dsb-y/p/11205867.html

【JLOI2013】地形生成相关推荐

  1. [JLOI2013]地形生成

    3193 首先按照第一关键字高度倒叙,第二关键字顺序的顺序拍下序 第一问O(n) dp一下 考虑一下第i个山能放在哪些山的后面,对于比第i个山高的,只能放在前关键字个的后面,但排在他的前面的和他一样高 ...

  2. BZOJ3193: [JLOI2013]地形生成

    传送门 Sol 第一问可以考虑按照山的高度从大到小放 但是这样如果遇到高度相同的就不好考虑,那么同时要求数量限制从小到大 这样每次放的时候后面的一定不会影响前面,并且高度相同的时候前面能放的位置后面的 ...

  3. 【JLOI2013合集】BZOJ3090 赛车 BZOJ3091 卡牌游戏 BZOJ3092 删除物品 BZOJ3093 地形生成...

    赛车: 这个题就是水平可见直线.. 水平可见直线怎么做呢.. 就是把所有直线按斜率排序.然后从前往后处理边. 当中维护一个栈.如果当前线和栈顶的交点在栈顶和栈顶-1的交点左边.那么弹掉栈顶.. (可以 ...

  4. ps原始数据清理脚本_创建地形模型一步到位!PS最新2019全球首款3D地形生成插件送给你...

    建过地形的设计同仁们都清楚,要建出一个精确的地形模型基本要靠CAD,SU,GIS,Rhino这些软件协同操作. 一般来说,有现成的CAD原始数据后,整理导入GIS中制作各种分析图,也要花半天时间.如果 ...

  5. Unity2D横版游戏地形生成

    演示视频 横版地形生成 功能: 将地形素材赋值给脚本,脚本会生成对应的地形素材,可以控制生成素材的高度,生成的时间间隔,是否每次随机时间生成,会有一个范围值来进行控制: Mountain 01_tra ...

  6. Unity无限地形生成(基于柏林噪声的简单生成)

    Unity无限地形生成(基于柏林噪声的简单生成) 要求:构建一个户外开放世界游戏,为该游戏添加天空,地形,植物,并支持场景里自由漫游.这里实现一个无限地形的产生: 实现漫游 漫游的功能由玩家移动和摄像 ...

  7. 七日杀unity报错_七日杀地形生成错误 | 手游网游页游攻略大全

    发布时间:2016-01-16 七日杀error initialising错误 七日杀玩不了怎么办.很多玩家打开游戏出现error initialising错误,要怎么解决呢?下面99单机网小编给大家 ...

  8. 读书笔记 PCG in Games 程序化内容生成4 分型、噪声和代理,地形生成

    总起 本文主要基于Procedural Content Generation in Games第四章介绍地形生成,给游戏角色提供可以站立的地面. 关于PCG in Games之前的笔记可见: 第一章读 ...

  9. 【UE4+Houdini+Bridge】程序化地形生成和野外植被撒点工具制作思路

    B站制作过程展示: Houdini To UE4 程序化地形生成制作过程与效果展示 Github Houdini与HDA源文件:Houdini-PCG-Environment-Generator 最终 ...

  10. 基于高度图的三维地形生成算法入门篇 —— 均匀网格地形生成算法

    赵 刚 引言     在三维游戏等建立的虚拟世界中要求虚拟场景具有很高的逼真度,其中的三维地形逼真度是关键之一.然而三维地形的生成和绘制需要巨大的计算量,实景地形的生成还需要地形数据库的支持,在运算能 ...

最新文章

  1. mysql 日期区间创建_按日期范围统计数据
  2. BZOJ4589: Hard Nim(FWT 快速幂)
  3. 跨界创立PayPal、特斯拉、SpaceX……,埃隆·马斯克是这样“掌控”知识的
  4. SolverParameter
  5. 内核版常见问题和精华贴总结(VER 0.1) [
  6. 基于matlab 求多边费马点,POJ2420(求多边形费马点) | 学步园
  7. hj212协议如何和php通讯,HJ212数据传输标准报文解析
  8. 大盘点: KubeCon EU 2019 应用管理领域的新看点!
  9. python unittest教程_python unittest 基本介绍
  10. VS C++ sprintf 格式
  11. 全网最详细的VMware虚拟机下载安装教程
  12. 提取地图中道路_准确度93%!人工智能如何完成高精度的地图特征推测?丨城市数据派...
  13. 设计师工资低?10大网站助你快速涨1万身价
  14. python 提取字幕_使用Python从zimuku下载字幕
  15. linux装中文字库,对linux安装中文字体库
  16. 涉密计算机怎么更新补丁,windows系统补丁你更新还是不更新?
  17. 网络层(ip地址划分以及路由)
  18. ubuntu程序莫名崩溃显示killed,程序闪退,排除OOM
  19. 【正则】包含大写小写字母数字的8到16位的密码正则
  20. CAD得到填充名称(网页版)

热门文章

  1. 东北电力大学计算机网络复试题,2020年东北电力大学计算机学院复试(20200901201159).pdf...
  2. mysql binlog2sql_mysql闪回工具binlog2sql安装配置教程详解
  3. DjangoFreshStore项目一
  4. ip转换软件在五八上能用吗?_交换机能当路由器用吗?浅谈交换器和路由器的区别...
  5. 正确使用cookie中的domain
  6. 关于站库分离渗透思考总结
  7. localStorage使用总结
  8. javascript对页面简单的加密和解密
  9. 《剑指offer》二维数组中的查找
  10. hadoop调优之一