新普金娱乐网址


[悬疑]听老警察称聊斋(1)

“冰花男孩”戳中全民的泪点:一无所有,努力读才是出路

数学bzoj1037[ZJOI2008]生日聚会Party dp

  • 十月 10, 2018
  • 数学
  • 没有评论

 [ZJOI2008]生日聚会Party

Time Limit: 10 Sec  Memory
Limit: 162 MB
Submit: 2832  Solved: 1674
[Submit][Status][Discuss]

章版权由作者李晓晖和博客园共有,若转载请给大庭广众处于标明出处:http://www.cnblogs.com/naaoveGIS/。

Output

  应涵盖一行,为开中求的答案。

1.背景

判定点面关系之算法有无数,在本人之前的博文中出平等篇专门针对那个进行了叙:判断点是否拿走于面中的Oracle存储过程描述。其中涉及了三种植常见判断点面关系的算法:

a差乘判别法(只对凸多边形)

b.面积判别法(只对凸多边形)

c.角度和判别法等(任意多边形均只是)

而上述直接判断点面关系之算法,其日复杂度是相对非常高的。假设一个面有N个点,那么判断1只点与该面的关系所欲花费的时日啊:N*N。

此处,我要是同大家议论的是一模一样种植为数学公式为根本,通过树立高效之空间索引来快速增长点面关系判断的算法。

Description

  今天凡hidadz小朋友的生辰,她请了成百上千有情人来出席她的寿辰party。
hidadz带在朋友等来到公园被,打算
坐成一排玩戏耍。为了玩不至于无聊,就座的方案应满足如下条件:对于自由连续的同等段落,男孩和女孩的数据的
差不超过k。很快,小朋友便找到了千篇一律种方案为了下来开始打。hidadz的好爱人Susie发现,这样的哪怕座方案其实
凡成百上千的,所以大家很快即找到了一样种,那么究竟有微种也?热爱数学之hidadz和其的情人等开始思索者题目
……
假设参加party的丁惨遭共有n个男孩和m个女孩,你是不是能解答Susie和hidadz的谜也?由于这数也许很
大抵,他们就想明白此数额除以12345678底余数。

5.优点

a.该算法避免了判断点属于哪个多边形时,要用富有多边形都遍历一整,提高了频率。

b.当点所在网格只含有于一个多边形时,此时并点面具体涉及判断还能够幸免,进一步提高了频率。

c.多边形信息索引文件中可分包该多边形的特性信息,在点面关系判断成功后,还能够领取到该多边形的性能信息,避免了针对性地理服务器的靠。

 

                                                                      
 —–欢迎转载,但保留版权,请于大庭广众处于标明出处:http://www.cnblogs.com/naaoveGIS/

                                                                          
如果你认为本文确实帮了公,可以微信扫一扫,进行小额的打赏和鼓励,谢谢
^_^

                                                数学 1

 

HINT

 

n , m ≤ 150,k ≤ 20。

 

2.3盖模流程图

 数学 2

           

 

Source

 

 题解:

  f(i,j,k,l)表示一致段落人共有i个男孩j个女孩,且立即段人的后缀中男孩和女孩的个数的差最充分值为k,

  女孩和男孩的个数的异最可怜值为l的方案总数

 1 #include<cstring>
 2 #include<cmath>
 3 #include<algorithm>
 4 #include<iostream>
 5 #include<cstdio>
 6 
 7 #define ll long long
 8 #define mod 12345678
 9 using namespace std;
10 inline int read()
11 {
12     int x=0,f=1;char ch=getchar();
13     while(ch>'9'||ch<'0'){if (ch=='-') f=-1;ch=getchar();}
14     while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
15     return x*f;
16 }
17 
18 int n,m,k,ans;
19 int f[303][153][23][23];
20 
21 int main()
22 {
23     n=read(),m=read(),k=read();
24     f[0][0][0][0]=1;
25     for(int i=0;i<n+m;i++)
26         for (int j=0;j<=n;j++)
27             for (int x=0;x<=k;x++)
28                 for (int y=0;y<=k;y++)
29                     if (f[i][j][x][y])
30                     {
31                         if (x+1<=k&&j+1<=n) (f[i+1][j+1][x+1][max(y-1,0)]+=f[i][j][x][y])%=mod; 
32                           if (y+1<=k&&i+1-j<=m) (f[i+1][j][max(x-1,0)][y+1]+=f[i][j][x][y])%=mod; 
33                     }
34     for (int i=0;i<=k;i++)
35         for (int j=0;j<=k;j++)
36             ans=(ans+f[n+m][n][i][j])%mod;
37     printf("%d\n",ans);        
38 }

 

4.利用索引判断点面关系具体方法

这里直接被出实现流程图:

 数学 3

 

 

Sample Input

1 2 1

2.算法模型

Sample Output

1

3.1杀成多边形信息索引

多方形信息索引中含有了三组成部分信息:属性信息、几哪里信息、信息大小。具体贯彻流程如下:

 数学 4

 

Input

  仅包含一行同3个整数,分别吗男孩数目n,女孩数目m,常数k。

2.2思路

建立覆盖了A、B多边形的格网,每个格网中含有了该属于怎么多边形之切实可行信息。判断点以及对之涉及经常,首先取得这个点落在哪个格网,然后抱该格网隶属于哪几独多变形。比如以上之P点,我们取得到P点所在的格网隶属于个别只多边形A和B。最后调用点面关系算法,判断点P和面A、B之间的关联。

 

3.2生成网格索引

网格索引中蕴含这样点滴像样信息:网格编号、网格隶属于的多方面形具体信息(多边形编号、多边形标识)。具体落实流程如下:

 数学 5

3.索引生成具体方法

变化的目录分为多边形信息索引和网格索引两独,下面分别讲述。

2.1命题

   数学 6                    

设若图,有AB两单多边形,需要看清P点是取于哪个多边形?

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图