题意:
给一个n*m的方针,求把k个石子放在阵中并且保证4条边上都有石子有多少种情况。
思路:
用容斥原理将上下左右四条边没有的情况求出拿总数减掉即可。
#include <iostream>
using namespace std;
const int mod=1000007;
int C[510][510];
void solve()
{
for(int i=0;i<510;i++)
C[i][0]=1;
for(int i=1;i<510;i++)
for(int j=1;j<=i;j++)
C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
}
int main()
{
int T,c=1,n,m,l;
solve();
//cout<<C[4][2]<<endl;
cin>>T;
while(T--)
{
cin>>n>>m>>l;
int ans=0;
for(int i=0;i<(1<<4);i++)
{
int c=n,k=m,j=0;
if(i&1) c--,j++;
if(i&2) k--,j++;
if(i&4) c--,j++;
if(i&8) k--,j++;
ans=(ans+C[c*k][l]*(j%2==0?1:-1))%mod;
//cout<<C[c*k][l]*(j%2==0?1:-1)<<endl;
}
cout<<"Case "<<c++<<": "<<(ans+mod)%mod<<endl;
}
return 0;
}