欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

UVA11806: 容差原理 + 状态压缩 - 代码:

最编程 2024-03-26 10:04:25
...
#include <bits/stdc++.h>
#define mod(x) ((x)%MOD)
using namespace std;
typedef long long ll;
int const MOD = 1e6 + 7;
int const N = 20 + 5;
int const M = 400 + 10;
int T,n,m,k;
int c[M][M];
void Comb(){
	for(int i=0;i<M;i++){
		c[i][i] = c[i][0] = 1;
		for(int j=1;j<i;j++)
			c[i][j] = mod(c[i-1][j-1] + c[i-1][j]);
	}
}
ll solve(){
	ll sum = 0;
	for(int i=0;i<(1<<4);i++){
		int n1 = n,m1 = m,bit = 0;;
		if((i>>0)&1)	n1--,bit++;
		if((i>>1)&1)	n1--,bit++;
		if((i>>2)&1)	m1--,bit++;
		if((i>>3)&1)	m1--,bit++;
		if(bit&1)	sum = mod(sum - c[n1*m1][k] + MOD);
		else	sum = mod(sum + c[n1*m1][k]);
	}
	return sum;
}
int main(){
	int caser = 0;
	cin>>T;
	Comb();
	while(T--){
		cin>>n>>m>>k;
		printf("Case %d: %d\n",++caser,solve());
	}
	return 0;
}