UVa:11806 Cheerleaders
2014-02-09 13:43
363 查看
白书上的例题,跟LRJ写的基本一样。
注意组合数的递推,这里写错WA了一次。
用到了容斥原理,需要各种情况的组合,用二进制枚举子集,由于是从全集里面扣掉,所以奇变成了减,偶变成了加。感觉还是很厉害。。
取余的时候如果有减法,要记得加一个模,避免出现负数。
注意组合数的递推,这里写错WA了一次。
用到了容斥原理,需要各种情况的组合,用二进制枚举子集,由于是从全集里面扣掉,所以奇变成了减,偶变成了加。感觉还是很厉害。。
取余的时候如果有减法,要记得加一个模,避免出现负数。
#include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <vector> #include <algorithm> #define ll long long #define INF 200000000 #define MOD 1000007 #define MAXN 4000*1005 using namespace std; int C[505][505]; void Init() { for(int i=0; i<=500; ++i) { C[i][0]=C[i][i]=1; for(int j=1; j<i; ++j) C[i][j]=(C[i-1][j-1]+C[i-1][j])%MOD; } } int main() { int T,kase=0; scanf("%d",&T); Init(); while(T--) { int N,M,K; scanf("%d%d%d",&M,&N,&K); int sum=0; for(int i=0; i<16; ++i) { int a=0,b=M,c=N; if(i&1) { a++; b--; } if(i&2) { a++; b--; } if(i&4) { a++; c--; } if(i&8) { a++; c--; } if(a&1) sum=(sum-C[b*c][K]+MOD)%MOD; else sum=(sum+C[b*c][K])%MOD; } printf("Case %d: %d\n",++kase,sum); } return 0; }
相关文章推荐
- 20 个强大的 Sublime Text 插件
- 信息化:是救星还是瓶颈?
- DevExpress.XtraGrid.Views.Grid.GridView 如何自增新行
- Android - View绘图原理总结
- hdu-1052-Tian Ji -- The Horse Racing
- Uva 10795 A Different Task
- spl提供的数据结构
- 单例模式
- 网络编程学习,给程序做注释
- SPOJ #453. Sums in a Triangle (tutorial)
- android edittext设置软键盘按钮事件
- 天才与锻炼
- Android导入一个工程时提示 Invalid project description
- 2014年开年所思所想所做
- IPA反编译
- 基于AWS的自动化部署实践
- 微信公众平台开发解惑
- word break ii; trying - complete - no ac
- 读《你的灯亮着吗》小结
- Eclipse中查看jar包中的源码