UVA 11806 - 치어 리더 (용 척 원리)
2536 단어 uva
제목: n * m 의 격자 를 드 리 겠 습 니 다. k 개의 돌 을 놓 습 니 다. 각 격자 에 최대 한 개의 돌 을 놓 습 니 다. 첫 번 째 줄, 마지막 줄, 첫 번 째 열, 마지막 열 에 모두 돌 이 있 습 니 다. k 개의 돌 을 놓 는 데 몇 가지 방법 이 있 는 지 물 어보 세 요.
문제 풀이: 용 척 원 리 를 이용 하여 전집 을 S 로 설정 하고 첫 번 째 줄 에 돌 이 없 는 A, 마지막 줄 에 돌 이 없 는 B, 첫 번 째 열 에 돌 이 없 는 C, 마지막 열 에 돌 이 없 는 D,
그럼 정 답 은 S 에 있 지만 ABCD 에 있 지 않 습 니 다.
AC 코드:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <list>
#include <deque>
#include <queue>
#include <iterator>
#include <stack>
#include <map>
#include <set>
#include <algorithm>
#include <cctype>
using namespace std;
#define si1(a) scanf("%d",&a)
#define si2(a,b) scanf("%d%d",&a,&b)
#define sd1(a) scanf("%lf",&a)
#define sd2(a,b) scanf("%lf%lf",&a,&b)
#define ss1(s) scanf("%s",s)
#define pi1(a) printf("%d
",a)
#define pi2(a,b) printf("%d %d
",a,b)
#define mset(a,b) memset(a,b,sizeof(a))
#define forb(i,a,b) for(int i=a;i<b;i++)
#define ford(i,a,b) for(int i=a;i<=b;i++)
typedef long long LL;
const int N=501;
const int mod=1000007;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
const double eps=1e-7;
int C[N][N];
int main()
{
mset(C,0);
forb(i,0,N)
{
C[i][0]=C[i][i]=1; //
forb(j,1,i)
C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;
}
int T,ca=0;
si1(T);
while(T--)
{
int n,m,k;
si1(n);si2(m,k);
int sum=0;
forb(i,0,16)
{
int b=0,r=n,c=m; //r/c ,b
if(i&1){r--;b++;} // , -1
if(i&2){r--;b++;}
if(i&4){c--;b++;}
if(i&8){c--;b++;}
if(b&1) sum=(sum-C[r*c][k]+mod)%mod; //
else sum=(sum+C[r*c][k])%mod; //
}
printf("Case %d: %d
",++ca,sum);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
UVA - 10986 Sending email(Dijkstra 인접 테이블 + 우선 순위 대기열 최적화)제목 대의: s점에서 t점까지의 최소 거리를 구하는 그림을 주세요. 확인: 적나라한 최단길이지만 n이 너무 크면 인접 행렬을 사용할 수 없기 때문에 Dijkstra에 대한 인접표 + 우선 대기열 최적화가 필요합니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.