秀秀的照片(photo)
秀秀的照片(photo)
题目描述
华华在和秀秀视频时有截很多图。华华发现秀秀的每一张照片都很萌很可爱。为什么会这样呢?华华在仔细看过秀秀的所有照片后,发现秀秀的照片都具有一个相同的性质。
设秀秀的分辨率为m×nm×n,即在水平方向上每一行有mm个像素,垂直方向上每一列有nn个像素,照片共有m×nm×n个像素。每一个像素都有一个颜色,共有kk种颜色。华华宝宝发现无论是沿着哪两列像素的分界线将秀秀的照片分成左右两半(共有m−1m−1种分法),左右两半不同颜色的种数都是相同的。
华华宝宝把自己的发现告诉了秀秀宝宝。现在秀秀想知道当照片分辨率为m×nm×n,像素颜色种数为kk(不一定kk种颜色都出现)的时候,共有多少张不同的照片满足上面的性质。
由于答案可能很大,你只需输出答案对109+7109+7取模的结果即可。
数据范围
子任务会给出部分测试数据的特点。如果你在解决题目中遇到了困难,可以尝试只解决一部分测试数据。每个测试点的规模及特点如下表:
|
测试点编号 |
nn |
mm |
kk |
|
1 |
n≤4n≤4 |
m≤4m≤4 |
k≤5k≤5 |
|
2 |
n≤10n≤10 |
||
|
3 |
n≤4n≤4 |
m≤10m≤10 |
|
|
4 |
n≤10n≤10 |
k≤10k≤10 |
|
|
5 |
k≤2000k≤2000 |
||
|
6 |
n≤100n≤100 |
m≤100m≤100 |
|
|
7 |
|||
|
8 |
n≤2000n≤2000 |
m≤2000m≤2000 |
|
|
9 |
k≤106k≤106 |
||
|
10 |
solution
坑题,浪费了我好多时间,然后测试垫底了。。
我们考虑边上的两列,他们的颜色数应要相同,且中间的颜色应为他们的交集的子集。
假设中间颜色数为i,两边颜色数为i+j(也就是单独出现j种颜色)
方案数为
意思是先选i颜色,中间每个格子有i种填法
再在剩余的中选j个,再选j个,确定两边
再乘以 i+j个格子填n个物品的方案数·,再忽略格子的顺序(i+j)!,两边配对(^2)
Sij即为第二类斯特林数,表示i个格子放j个物品,且每个格子至少放一个的方案数
如果i单独放一个格子为s[i-1][j-1]
否则为s[i-1][j] 且有j种方法
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 4005
#define ll long long
#define mod 1000000007
using namespace std;
int n,m,k;
ll S[maxn][maxn],jc[1000006],ny[1000006],ans;
ll work(ll a,int num){
ll p=a,wa=1;
while(num){
if(num&1)wa=wa*p;
p=p*p;p%=mod;wa%=mod;num/=2;
}
return wa;
}
ll C(int N,int M){
return jc[N]*ny[M]%mod*ny[N-M]%mod;
}
int main()
{
cin>>n>>m>>k;
int nn=n+n;
S[0][0]=1;
for(int i=1;i<=nn;i++){
for(int j=1;j<=i;j++){
S[i][j]=S[i-1][j-1]%mod+j*S[i-1][j]%mod;
S[i][j]%=mod;
//cout<<S[i][j]<<' ';
}
}
int M=1000000;
jc[0]=1;for(int i=1;i<=M;i++)jc[i]=jc[i-1]*i%mod;
ny[M]=work(jc[M],mod-2);
for(int i=M-1;i>=0;i--)ny[i]=ny[i+1]*(i+1)%mod;
if(m==1){
printf("%lld",work(k,n));return 0;
}
for(int i=0;i<=min(n,k);i++)
for(int j=0;j<=n,k;j++){
if(i+j+j>k)break;if(i+j>n)break;
ll tmp=C(k,i)*C(k-i,j)%mod*C(k-i-j,j)%mod;
tmp=tmp*work(i,(m-2)*n)%mod;
ll t2=S[n][i+j]*jc[i+j]%mod;t2=t2*t2%mod;
ans=ans+tmp*t2%mod;ans%=mod;
}
cout<<ans<<endl;
return 0;
}
秀秀的照片(photo)的更多相关文章
- 洛谷 P3084 [USACO13OPEN]照片Photo 解题报告
[USACO13OPEN]照片Photo 题目描述 农夫约翰决定给站在一条线上的\(N(1 \le N \le 200,000)\)头奶牛制作一张全家福照片,\(N\)头奶牛编号\(1\)到\(N\) ...
- [USACO13OPEN]照片Photo
题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows (1 <= N < ...
- P3084 [USACO13OPEN]照片Photo (dp+单调队列优化)
题目链接:传送门 题目: 题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows ( ...
- P3084 [USACO13OPEN]照片Photo
题目描述 农夫约翰决定给站在一条线上的N(1 <= N <= 200,000)头奶牛制作一张全家福照片,N头奶牛编号1到N. 于是约翰拍摄了M(1 <= M <= 100,00 ...
- 洛谷3084 [USACO13OPEN]照片Photo
原题链接 神仙\(DP\)啊... 题解请移步隔壁大佬的博客\(QAQ\) #include<cstdio> using namespace std; const int N = 2e5 ...
- Luugu 3084 [USACO13OPEN]照片Photo
很神仙的dp...假装自己看懂了,以后回来复习复习... 设$f_{i}$表示从$1$到$i$,且$i$这个点必放的最大数量. 一个区间有两个限制条件:至少放一个,至多放一个. 因为一个区间至多要放一 ...
- 【简●解】[USACO] 照片Photo
[简●解][USACO] 照片Photo [题目大意] 在\(1\)~\(N\)的序列上有\(M\)个区间,使得这\(M\)个小区间每个覆盖了且仅覆盖了一个点,求最多点数,如果无解,输出\(-1\). ...
- P3084 [USACO13OPEN]照片Photo dp
题意: 有n个区间,每个区间只能有一个斑点奶牛,问最多有几个斑点奶牛. 思路: 首先要处理出每个点的L[i],R[i]. L[i]表示L[i]-i-1之间一定有一个点.i也是选中的. R[i]表示R[ ...
- [USACO13OPEN]照片Photo 题解
题面 这道题似乎可以用单调队列优化DP做,但这里讲的是一种差分约束的思路; 设s[i]表示1~i中选了多少个: s[b[i]]-s[a[i]-1]<=1; s[b[i]]-s[a[i]-1]&g ...
随机推荐
- elasticsearch RestHighLevelClient 使用方法及封装工具
目录 EsClientRHL 更新日志 开发原因: 使用前你应该具有哪些技能 工具功能范围介绍 工具源码结构介绍 开始使用 未来规划 git地址:https://gitee.com/zxporz/ES ...
- CUDA编程时,线程块的处理方法
- React后台管理系统-table-list组件
table-list组件可用于商品列表,用户列表页面 需要传入一个tableHeads集合和tablebody import React from 'react'; // 通用的列表 class ...
- json代码驾照考题批量加入MySQL数据库 ps.executeUpdate()永远只能悲催的加一条数据 去掉id主键自增 用foreach循环数据库只能出现一条语句
package com.swift; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStrea ...
- C++大数问题
1.大数的加法 语法:add(char a[],char b[],char s[]); 参数: a[]:被加数,用字符串表示,位数不限 b[]:加数,用字符串表示,位数不限 s[]:结果,用字符串表示 ...
- 牛客NOIP普及组R1 C括号(dp)
题意 题目链接 Sol maya普及组的dp都要想很长时间,我真是越来越菜了qwq 设$f[i][j]$表示当前到第$i$个位置,剩下$j$个左括号没被匹配 转移的时候判断一下即可 /* */ #in ...
- Microsoft .Net framework 4.0出现 安装不成功,错误代码0x80240037 的解决方法
,安装Microsoft .Net framework 时出现 解决方法:用QQ管家 之后 以上就解决了
- mysql update 多表关联更新
UPDATE new_schedules_spider_static_schedule s join new_scac_port p on p.`PORT` = s.`PORT` and p.SCAC ...
- (转)为什么在 2013 十月番中出现了很多以 3D 渲染代替传统 2D 绘画来表现人物的镜头?
一直都有的,特别是三次元这家公司一直致力于3d的风格化渲染既大家说的3d转2d.目前最厉害的商业化软件是pencil+,占领大部分的作品.而mentalray,早期用于disney的部分风格化渲染:i ...
- PHP 二维数组某个字段进行排序
/** * @param $arrUsers * @return mixed *二维数组某个字段进行排序 */ function quick_sort($arrUsers) { $sort = arr ...