UVa 11806 - Cheerleaders (组合计数+容斥原理)
《训练指南》p.108
#include <cstdio> #include <cstring> #include <cstdlib> using namespace std; const int MOD = 1000007; const int MAXN = 500; int C[MAXN][MAXN]; void init() { memset( C, 0, sizeof(C) ); C[0][0] = 1; for ( int i = 0; i < MAXN; ++i ) { C[i][0] = C[i][i] = 1; for ( int j = 1; j < i; ++j ) C[i][j] = ( C[i-1][j] + C[i-1][j-1] ) % MOD; } return; } int main() { init(); int T, cas = 0; scanf( "%d", &T ); while ( T-- ) { int M, N, K; int ans = 0; scanf( "%d%d%d", &M, &N, &K ); for ( int S = 0; S < ( 1 << 4 ); ++S ) { int cnt = 0; int r = M, c = N; if ( S & 1 ) --r, ++cnt; if ( S & 2 ) --r, ++cnt; if ( S & 4 ) --c, ++cnt; if ( S & 8 ) --c, ++cnt; if ( cnt & 1 ) ans = ( ans + MOD - C[r*c][K] )%MOD; else ans = ( ans + C[r*c][K] )%MOD; } printf( "Case %d: %d\n", ++cas, ans ); } return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步