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;
}
下一篇: 前端人员也能理解的高阶算法宽容原则