日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

模拟城市2.0

發(fā)布時(shí)間:2023/11/27 生活经验 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模拟城市2.0 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目背景

博弈正在機(jī)房頹一個(gè)叫做《模擬城市2.0》的游戲。

2048年,經(jīng)過不懈努力,博弈終于被組織委以重任,成為D市市委書記!他勤學(xué)好問,勵(lì)精圖治,很快把D市建設(shè)成富強(qiáng)民主文明和諧的美好城市。為了進(jìn)一步深化發(fā)展,他決定在海邊建立一個(gè)經(jīng)濟(jì)開發(fā)區(qū)。

題目描述

已知開發(fā)區(qū)的建筑地塊是一個(gè)n×nn \times nn×n的矩形,而開發(fā)區(qū)可以建造三種建筑: 商業(yè)樓,住宅樓,教學(xué)樓。這任何兩座建筑可以堆疊,可以緊密相鄰。他需要建造正好aaa座商業(yè)樓,bbb座住宅樓,ccc座教學(xué)樓。但是,城市建成后要應(yīng)付檢查,如果安排的太混亂會(huì)被批評(píng)。不過幸運(yùn)的是,只有一條公路經(jīng)過了該開發(fā)區(qū)的一側(cè),就是說,檢察人員全程只能看到開發(fā)區(qū)的一面。

因此,他需要使得開發(fā)區(qū)建成后,從正面看去,只有一種類型的建筑。

一共有多少種滿足條件的方案呢? 請(qǐng)輸出方案數(shù),并對(duì)109+710^9+7109+7取模。

注意,對(duì)于同一個(gè)nnn,會(huì)有多組數(shù)據(jù)。

輸入輸出格式

輸入格式:

第一行兩個(gè)整數(shù)n,Tn,Tn,T

接下來T行,每行三個(gè)整數(shù),表示該組數(shù)據(jù)的a,b,ca,b,ca,b,c

輸出格式:

輸出共T行,每行一個(gè)整數(shù):表示各數(shù)據(jù)答案取模109+710^9+7109+7的結(jié)果。

輸入輸出樣例

輸入樣例#1: 復(fù)制
2 1
1 1 0
輸出樣例#1: 復(fù)制
4
輸入樣例#2: 復(fù)制
2 1
2 1 0
輸出樣例#2: 復(fù)制
8

說明

對(duì)于20%的數(shù)據(jù),n≤2??a,b,c≤3??T≤5n \leq 2 \ \ a,b,c \leq 3 \ \ T \leq 5n2??a,b,c3??T5

對(duì)于另外10%的數(shù)據(jù),n≤3??a,b,c≤4??T≤5n \leq 3 \ \ a,b,c \leq 4 \ \ T \leq 5n3??a,b,c4??T5

對(duì)于另外20%的數(shù)據(jù),b=0b=0b=0

對(duì)于另外10%的數(shù)據(jù),T≤10T \leq 10T10

對(duì)于全部100%的數(shù)據(jù),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

縱列和縱列之間不會(huì)相互遮擋,因此方案數(shù)很好統(tǒng)計(jì)。

所以我們需要處理出縱列合法的方案數(shù)。

雖然有三種方塊,但我們只是需要一種漏在外面,所以可以把另外兩種先不考慮

令f[i][j][k][x][y]為第i格,高度為j,最高為k,可見的方格為x,不可見為y的方案數(shù)

放到下一格:

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];

?

現(xiàn)在我們處理出了一列的方案數(shù)

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

那么對(duì)于一列,我們求出了可見數(shù)x,不可見數(shù)y的方案數(shù)

接下來考慮行,因?yàn)榱兄g不影響

dp[i][j][k]表示第i列可見數(shù)j,不可見數(shù)k的方案數(shù)

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

?

如果只讓一種(如住宅樓)能看見,那么方案數(shù)已經(jīng)顯而易見了。

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 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/Y-E-T-I/p/7788956.html

總結(jié)

以上是生活随笔為你收集整理的模拟城市2.0的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。