题目描述

棋盘是一个n×m的矩形,分成n行m列共n*m个小方格。现在萌萌和南南有C种不同颜色的颜料,他们希望把棋盘用这些颜料染色,并满足以下规定: 
1.  棋盘的每一个小方格既可以染色(染成C种颜色中的一种) ,也可以不染色。 
2.  棋盘的每一行至少有一个小方格被染色。 
3.  棋盘的每一列至少有一个小方格被染色。 
4.  种颜色都在棋盘上出现至少一次。 
以下是一些将3×3棋盘染成C = 3种颜色(红、黄、蓝)的例子:

请你求出满足要求的不同的染色方案总数。只要存在一个位置的颜色不同,即认为两个染色方案是不同的

输入

输入只有一行 3 个整数 n,m,c 。1 < = n,m,c < = 400

输出

输出一个整数,为不同染色方案总数。因为总数可能很大,只需输出总数
mod 1,000,000,007的值。

样例输入

2 2 3

样例输出

60


题解

容斥原理

题目要求:所有行都有格子被染色、所有列都有格子被染色、所有颜色都有格子被染色的方案数。

我们可以容斥一下,求:有 $i$ 行没有格子被染色、有 $j$ 列没有格子被染色、有 $k$ 种颜色没有格子被染色的方案数。

那么答案为 $\sum\limits_{i=0}^n\sum\limits_{j=0}^m\sum\limits_{k=0}^c(-1)^{i+j+k}C_n^iC_m^jC_c^kk^{(n-i)(m-j)}$ 。

由于 $n,m,c$ 都只有400,因此不需要做进一步推导,直接预处理组合数+幂,暴力计算即可。

时间复杂度 $O(n^3)$

#include <cstdio>
#include <algorithm>
#define mod 1000000007
using namespace std;
typedef long long ll;
ll c[410][410] , pow[160010];
int main()
{
int n , m , p , i , j , k;
ll ans = 0;
scanf("%d%d%d" , &n , &m , &p);
pow[0] = c[0][0] = 1;
for(i = 1 ; i <= n || i <= m || i <= p ; i ++ )
{
c[i][0] = 1;
for(j = 1 ; j <= i ; j ++ )
c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod;
}
for(i = 0 ; i <= p ; i ++ )
{
for(j = 1 ; j <= n * m ; j ++ ) pow[j] = pow[j - 1] * (p - i + 1) % mod;
for(j = 0 ; j <= n ; j ++ )
for(k = 0 ; k <= m ; k ++ )
ans = (ans + c[p][i] * c[n][j] % mod * c[m][k] % mod * pow[(n - j) * (m - k)] % mod * ((i ^ j ^ k) & 1 ? -1 : 1) + mod) % mod;
}
printf("%lld\n" , ans);
return 0;
}

最新文章

  1. CentOS7 查看IP、Gateway、DNS、Hostname
  2. XIB 上的控件不显示怎么办
  3. Windows简单几步实现系统自动关机设置
  4. 一个请求在Struts2框架中的处理流程
  5. Objc Block
  6. nginx lua整合安装
  7. 【转】Hibernate映射机制之XXX.hbm.xml
  8. 解决 maven项目问题 An error occurred while filtering resources
  9. mybatis------xml的一些规范等
  10. 重新认识JavaScript里的数据类型
  11. js alert(“”)弹框 自定义样式
  12. 201521123115《Java程序设计》第13周学习总结
  13. H5--Web Worker
  14. android自定义listview实现header悬浮框效果
  15. [转载]ECMall模板解析语法与机制
  16. Tsung&#160;MQTT协议简介及MQTT&#160;xml文档配置介绍
  17. 17/11/24 05:08:44 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  18. MySQL技术内幕读书笔记(八)——事务
  19. R语言学习 第二篇:矩阵和数组
  20. 理解Node.js异步非阻塞I/O与传统线性阻塞IO的区别(转)

热门文章

  1. 20155325 2016-2017-2 《Java程序设计》第3周学习总结
  2. 再论WPF中的UseLayoutRounding和SnapsToDevicePixels
  3. clean code(一)
  4. 自动化运维工具saltstack02 -- 之SaltStack的配置管理
  5. 3星|《给你讲个笑话:我是创业公司CEO》:创业成功就是上帝掷骰子
  6. 从零开始的Python学习Episode 12——迭代器&amp;生成器
  7. Python多重赋值
  8. Kafka安装之二 在CentOS 7上安装Kafka
  9. 性能测试持续集成(Jenkins+Ant+Jmeter)
  10. UUID.randomUUID()简单介绍