当前位置: 首页 > 编程日记 > 正文

模拟城市2.0

题目背景

博弈正在机房颓一个叫做《模拟城市2.0》的游戏。

2048年,经过不懈努力,博弈终于被组织委以重任,成为D市市委书记!他勤学好问,励精图治,很快把D市建设成富强民主文明和谐的美好城市。为了进一步深化发展,他决定在海边建立一个经济开发区。

题目描述

已知开发区的建筑地块是一个n×nn \times nn×n的矩形,而开发区可以建造三种建筑: 商业楼,住宅楼,教学楼。这任何两座建筑可以堆叠,可以紧密相邻。他需要建造正好aaa座商业楼,bbb座住宅楼,ccc座教学楼。但是,城市建成后要应付检查,如果安排的太混乱会被批评。不过幸运的是,只有一条公路经过了该开发区的一侧,就是说,检察人员全程只能看到开发区的一面。

因此,他需要使得开发区建成后,从正面看去,只有一种类型的建筑。

一共有多少种满足条件的方案呢? 请输出方案数,并对109+710^9+7109+7取模。

注意,对于同一个nnn,会有多组数据。

输入输出格式

输入格式:

第一行两个整数n,Tn,Tn,T

接下来T行,每行三个整数,表示该组数据的a,b,ca,b,ca,b,c

输出格式:

输出共T行,每行一个整数:表示各数据答案取模109+710^9+7109+7的结果。

输入输出样例

输入样例#1: 复制
2 1
1 1 0
输出样例#1: 复制
4
输入样例#2: 复制
2 1
2 1 0
输出样例#2: 复制
8

说明

对于20%的数据,n≤2  a,b,c≤3  T≤5n \leq 2 \ \ a,b,c \leq 3 \ \ T \leq 5n2  a,b,c3  T5

对于另外10%的数据,n≤3  a,b,c≤4  T≤5n \leq 3 \ \ a,b,c \leq 4 \ \ T \leq 5n3  a,b,c4  T5

对于另外20%的数据,b=0b=0b=0

对于另外10%的数据,T≤10T \leq 10T10

对于全部100%的数据,a,b,c,n≤25  T≤5×105a,b,c,n \leq 25 \ \ T \leq 5\times 10^5a,b,c,n25  T5×105

样例1

样例2

纵列和纵列之间不会相互遮挡,因此方案数很好统计。

所以我们需要处理出纵列合法的方案数。

虽然有三种方块,但我们只是需要一种漏在外面,所以可以把另外两种先不考虑

令f[i][j][k][x][y]为第i格,高度为j,最高为k,可见的方格为x,不可见为y的方案数

放到下一格:

1 f[i+1][0][k][x][y]+=f[i][k][k][x][y];

放到上面:

1 if (j==k)
2       f[i][j+1][k+1][x+1][y]+=f[i][j][k][x][y];
3 else
4       f[i][j+1][k][x+1][y]+=f[i][j][k][x][y],
5       f[i][j+1][k][x][y+1]+=f[i][j][k][x][y];

现在我们处理出了一列的方案数

g[x][y]表示∑f[n][0][i][x][y]

那么对于一列,我们求出了可见数x,不可见数y的方案数

接下来考虑行,因为列之间不影响

dp[i][j][k]表示第i列可见数j,不可见数k的方案数

dp[i+1][x+j][y+k]+=dp[i][j][k]*g[x][y]

如果只让一种(如住宅楼)能看见,那么方案数已经显而易见了。

1 dp[n][a][b+c]*C[c+b][b];

那么最终答案就呼之欲出了。

1 ans=(dp[n][a][b+c]*C[b+c][b])+(dp[n][b][c+a]*C[c+a][c])+(dp[n][c][a+b]*C[a+b][a]);

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 typedef long long lol;
 7 lol f[27][27][27][27][54],dp[27][27][54],C[54][54],g[54][54],ans;
 8 lol Mod=1000000007;
 9 int n,T;
10 int main()
11 {int i,j,k,x,y,a,b,c;
12   cin>>n>>T;
13   f[0][0][0][0][0]=1;
14   for (i=0;i<n;i++)
15     {
16       for (j=0;j<=25;j++)
17     {
18       for (k=j;k<=25;k++)
19         {
20           for (x=k;x<=25;x++)
21         {
22           for (y=0;y<=50;y++)
23             if (f[i][j][k][x][y])
24               {//cout<<f[i][j][k][x][y]<<endl;
25             lol s=f[i][j][k][x][y];
26             f[i+1][0][k][x][y]+=s,f[i+1][0][k][x][y]%=Mod;
27             if (j==k)
28               f[i][j+1][k+1][x+1][y]+=s,f[i][j+1][k+1][x+1][y]%=Mod;
29             else 
30               {
31                 f[i][j+1][k][x+1][y]+=s,f[i][j+1][k][x+1][y]%=Mod;
32                 f[i][j+1][k][x][y+1]+=s,f[i][j+1][k][x][y+1]%=Mod;
33               }
34               }
35         }
36         }
37     }
38     }
39   for (i=0;i<=25;i++)
40     for (x=i;x<=25;x++)
41       for (y=0;y<=50;y++)
42     g[x][y]+=f[n][0][i][x][y],g[x][y]%=Mod;
43   dp[0][0][0]=1;
44   for (i=0;i<n;i++)
45     {
46       for (j=0;j<=25;j++)
47     {
48       for (k=0;k<=50;k++)
49         if (dp[i][j][k])
50           {//cout<<dp[i][j][k]<<endl;
51           for (x=0;j+x<=25;x++)
52         for (y=0;k+y<=50;y++)
53           {
54             dp[i+1][j+x][k+y]+=dp[i][j][k]*g[x][y]%Mod;
55             dp[i+1][j+x][k+y]%=Mod;         
56           }
57         }
58     }
59     }
60     C[0][0]=1;
61     for(i=1;i<=50;i++)
62     {
63         C[i][0]=1;
64         for(j=1;j<=i;j++)
65         {
66             C[i][j]=C[i-1][j-1]+C[i-1][j];
67             if (C[i][j]>=Mod) C[i][j]-=Mod;
68         }
69     }
70   while (T--)
71     {
72       scanf("%d%d%d",&a,&b,&c);
73       //cout<<dp[n][a][b+c]<<' '<<dp[n][b][a+c]<<' '<<dp[n][c][a+b]<<endl;
74       ans=((dp[n][a][b+c]*C[b+c][b]%Mod)+(dp[n][b][a+c]*C[a+c][a]%Mod)+(dp[n][c][a+b]*C[a+b][a]%Mod))%Mod;
75       printf("%lld\n",ans);
76     }
77 }

转载于:https://www.cnblogs.com/Y-E-T-I/p/7788956.html

相关文章:

bzoj:1221;vijos 1552 软件开发

Description 某软件公司正在规划一项n天的软件开发计划&#xff0c;根据开发计划第i天需要ni个软件开发人员&#xff0c;为了提高软件开发人员的效率&#xff0c;公司给软件人员提供了很多的服务&#xff0c;其中一项服务就是要为每个开发人员每天提供一块消毒毛巾&#xff0c;…

u-charts 曲线图中间有部分没数据,导致点和点无法连成线的问题解决

解决曲线图或者折线图在两端中间没有数据时无法绘画成线的问题源码修改, 解决方案: 在数据之间填充假数据,并且创建一个和点的数据同级的 list 来验证是不是假数据,如果是假数据就不绘制点,是真数据才绘制点,达到点和点之间没数据但是能连线的效果 先看效果图: 数据格…

python构建json_如何使用Python构建JSON API

python构建jsonThe JSON API specification is a powerful way for enabling communication between client and server. It specifies the structure of the requests and responses sent between the two, using the JSON format.JSON API规范是启用客户端和服务器之间通信的…

样式集 - 自适应居中弹窗

效果图&#xff1a; 弹窗1代码 <!-- 答题正确弹窗 --><block v-if"answer_true_show"><view class"answer_true_bg"></view><view class"answer_true"><img class"true_bg_img" :src"qualifyi…

struts2中 ServletActionContext与ActionContext区别

1. ActionContext 在Struts2开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息,甚至需要直接对JavaServlet Http的请求(HttpServletRequest),响应(HttpServletResponse)操作. 我们需要在Action中取得req…

[记录]calculate age based on date of birth

calculate age based on date of birth know one new webiste:eval.in run php code转载于:https://www.cnblogs.com/fsong/p/5190273.html

有抱负的Web开发人员应考虑的6件事

Becoming a web developer can be as challenging as working out every day.成为网络开发人员就像每天锻炼一样具有挑战性。 It’s important to know what it will take to succeed as a web developer.重要的是要知道要成为一名Web开发人员要取得成功。 Here are 6 things…

阿里云OSS上传图片实现流程

前置&#xff0c;在阿里云开通OSS对象储存。然后在下图文件管理配置文件储存目录和图中传输管理配置访问域名。 1.复制 uploadFileUtil 文件夹和 uploadFile.js 文件在 util 文件夹 2.在使用的页面 引入 uploadFile 效果图&#xff1a; 实现代码 <template><view c…

修改远程桌面连接3389端口号

修改注册表&#xff1a; HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\Wds\Repwd\Tds\Tcp 键&#xff1a;PortNumber&#xff0c;以十进制显示&#xff1a;3389&#xff0c;修改成55555&#xff0c;保存刷新注册表。 HKEY_LOCAL_MACHINE\SYSTEM\Curre…

理解 : UDID、UUID、IDFA、IDFV

iOS获取设备唯一标识的各种方法&#xff1f;IDFA、IDFV、UDID分别是什么含义&#xff1f;iOS获取设备ID总结IDFA解释 关于UUID的理解 : 英文名称是&#xff1a;Universally Unique Identifier,翻译过来就是通用唯一标识符。 UUID是指在一台机器上生成的数字&#xff0c;它保证对…

推箱子2-向右推!_保持冷静,砍箱子-me脚

推箱子2-向右推!Hack The Box (HTB) is an online platform allowing you to test your penetration testing skills. It contains several challenges that are constantly updated. Some of them simulating real world scenarios and some of them leaning more towards a C…

H5面试题---介绍js的基本数据类型

js的基本数据类型 Undefined、Null、Boolean、Number、String 转载于:https://www.cnblogs.com/songchunmin/p/7789582.html

Node.js express 之mongoose 从异步回调函数返回值,类似于同步

http://my.oschina.net/antianlu/blog/187023转载于:https://www.cnblogs.com/cylblogs/p/5192314.html

小程序登录、用户信息相关接口调整说明

为&#xfeff;优化用户的使用体验&#xff0c;平台将进行以下调整&#xff1a; 2021年2月23日起&#xff0c;若小程序已在微信开放平台进行绑定&#xff0c;则通过wx.login接口获取的登录凭证可直接换取unionID2021年4月13日后发布的小程序新版本&#xff0c;无法通过wx.getU…

小程序 reduce_使用Reduce制作的10个JavaScript实用程序功能

小程序 reduceThe multi-tool strikes again. 多功能工具再次触击。 In my last article I offered you a challenge to recreate well-known functions using reduce. This article will show you how some of them can be implemented, along with some extras! 在上一篇文章…

流媒体,hls

所谓流媒体是指采用流式传输的方式在Internet播放的媒体格式。流媒体又叫流式媒体&#xff0c;它是指商家用一个视频传送服务器把节目当成数据包发出&#xff0c;传送到网络上。用户通过解压设备对这些数据进行解压后&#xff0c;节目就会像发送前那样显示出来。流媒体&#xf…

uniapp实现页面左右滑动,上下滑动事件

实现代码&#xff1a; <view class"" touchstart"touchstart" touchend"touchend"> </view> data() {return {touchData: {}, //滑动事件数据} } methods: {touchstart(e) {this.touchData.clientX e.changedTouches[0].clientX;…

android逆向分析概述_Android存储概述

android逆向分析概述Storage is this thing we are all aware of, but always take for granted. Not long ago, every leap in storage capacity was incremental and appeared to be impossible. Nowadays, we don’t give a second thought when contemplating how much of …

小程序地图的使用笔记

这两天在看小程序的地图&#xff0c;写写笔记记录一下 小程序官方文档提供的方法 https://mp.weixin.qq.com/debug/wxadoc/dev/api/location.html 腾讯地图提供的jssdk http://lbs.qq.com/qqmap_wx_jssdk/qqmapwx.html 根据提示使用腾讯地图jssdk需要申请&#xff0c;在实例化的…

JS 实现可停顿的垂直滚动

1 var ScrollMiddle {2 Odiv:document.getElementById(comment), // 目标DOM 3 Oli: document.getElementById(comment).getElementsByTagName(li), 4 times:30, // 配置滚动时间 …

uniapp 上拉加载更多完整实现源码

直接上代码 <template><view class"searchList"><!-- 搜索框 --><Search></Search><img class"top_img" src"/static/image/dataDelivery.png" /><view class"menus p_r"><view class&…

todoist 无法登陆_通过构建Todoist克隆将您的React技能提升到一个新的水平

todoist 无法登陆In this intermediate React course from Karl Hadwen, you will learn how to create the popular Todoist application from scratch using React, Custom Hooks, Firebase & the React Testing Library. You will lean how to use SCSS to style the ap…

w3cscholl的在线代码编辑工具

https://www.w3cschool.cn/tryrun/runcode?langc转载于:https://www.cnblogs.com/jhj117/p/7804133.html

点击事件加锁封装

看代码 // 提交答案 btnReply() {if (!this.$clickLock) returnthis.changeClickLock() } 封装代码 // 点击事件加锁 使用方式&#xff0c;在点击时加入以下代码// if (!this.$clickLock) return// this.changeClickLock()that.changeClickLock () > {that.$clickLock f…

WinCE 7 Mouse HOOK

WinCE 5.0&6.0 的鼠标 HOOK&#xff0c;偶在本博客中已经写过文章。WinCE7.0 的下的鼠标 HOOK 实现&#xff0c;完全和 WinCE 6 是一样的。 效果&#xff1a;在 WinCE 系统界面可以 HOOK 住鼠标的操作。 但是在 Silverlight 应用的界面&#xff0c;HOOK 功能失效。转载于:h…

devops和docker_通过免费的2小时Docker课程学习DevOps基础知识

devops和dockerDocker is a powerful DevOps tool for putting your apps into "containers." Docker是功能强大的DevOps工具&#xff0c;可将您的应用程序放入“容器”中。 You can run these same containers anywhere - on your laptop, on a server - even on a…

生成24位字符串ID__IdGenerator.java

此工具类用于生成24位字符串ID&#xff0c;唯一不重复。 直接通过 IdGenerator.get() 获取。 源码如下&#xff1a;(点击下载源码 - IdGenerator.java ) 1 import java.net.NetworkInterface;2 import java.nio.ByteBuffer;3 import java.nio.ByteOrder;4 import java.util.Enu…

IDEA构建一个mybatis项目

目录结构如下&#xff1a; 在pom.xml中配置需要的jar包 <dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.3.0</version></dependency><dependency><gro…

小程序在canvas上层做图片滚动

实现该功能踩过的坑 1.swiper的swiper-item中image图片无法在canvas的上层显示&#xff0c;会被canvas 覆盖 2.swiper的swiper-item 里面放 cover-image 会样式错乱 3.scroll-view里面放 cover-image 会样式错乱 解决方案&#xff1a;使用CSS样式实现&#xff0c;超出部分隐…

React是如何在后台运行的

React is a very popular JavaScript library. With over 5.5 million weekly downloads, React is enjoying great popularity. But not a lot of React developers know how React works under the hood. React是一个非常流行JavaScript库。 每周的下载量超过550万&#xff0…