首页 > 其他分享 >UVA11806 Cheerleaders

UVA11806 Cheerleaders

时间:2023-04-18 21:14:10浏览次数:36  
标签:tes const int Cheerleaders 网格 UVA11806 include

你有一个n×m的网格图,现在你要将K个人放在网格中,满足一下条件:

  1. 网格图的四个边都至少有一个人。

  2. 每个格子上不能有两个人。

  3. 每个人必须都有位置。

注意:四个角的人可以同时算作在两个边上

 

 容斥原理

 

 

 J=0 时就是 allAnswer

#include <iostream>
#include <cstring>
#include <sstream>
using namespace std;
const int N=600;
const int mod =1e6+7;
 int c[N][N],n,m,K;
 
 void init(){
 	int i,j;
 	c[1][1]=1;
 	for(i=0;i<=500;i++) c[i][0]=1;
 	
 	for(i=2;i<=500;i++)
 		for(j=1;j<=i;j++)
 		c[i][j]=(c[i-1][j]+c[i-1][j-1]),c[i][j]%=mod;
 }
 // j=0 全集
 void sov(int cas){
 	int i,j;
 	cin>>n>>m>>K;
 	int ans= 0;
 	for(j=0;j<(1<<4);j++){
 		int cnt=0,x=n,y=m;
 		
 		for(i=0;i<4;i++)
 			if(j&(1<<i)){
 				cnt++;
 				if(i==0) --x; if(i==1) --x; if(i==2) --y;
 				if(i==3) --y;
 			}
 		if(cnt%2==0) ans+=c[x*y][K],ans%=mod;
 		else ans=(ans-c[x*y][K]+mod)%mod;
 	}
 	printf("Case %d: %d\n",cas,ans);
 }
 signed main(){
 	init(); 
 	int cas=0,tes;
 	cin>>tes;
 	while(tes--)
  	sov(++cas);
 }
 
 
 

 

标签:tes,const,int,Cheerleaders,网格,UVA11806,include
From: https://www.cnblogs.com/towboa/p/17331099.html

相关文章