[openjude] 상자 와 작은 공의 4 (dp)
전송 문
해제
이 문 제 는 Push Botton Lock 문제 와 비슷 하지만 제한 조건 을 추가 하면 상자 마다 적어도 k 개 를 넣 는 것 이다.그러면 두 번 째 string 은 그리 쉽 지 않 은 것 같 지만 데이터 범위 가 이렇게 작 으 면 O (n3) dp 를 직접 할 수 있 습 니 다.f (i, j) 를 설정 하면 i 개의 서로 다른 작은 공 을 j 개의 서로 다른 상자 에 넣 는 방안 수 를 나타 낸다. 그러면 f (i, j) = > p = knf (i - p, j - 1) 는 8727 ° c (n - i + p, p) 이 고 그 중에서 c 는 조합 수 이다.당시 상태 와 같다.j - 1 개의 상자 에 i - p 개 를 넣 었 기 때문에 j 의 상 자 는 p 개 를 넣 고 n - i + p 개 를 선택 할 수 있 습 니 다.
코드
#include
#include
#include
using namespace std;
#define LL long long
int n,m,p;
LL c[20][20],f[20][20];
void clear()
{
memset(f,0,sizeof(f));
}
int main()
{
for (int i=0;i<=15;++i) c[i][0]=1;
for (int i=1;i<=15;++i)
for (int j=1;j<=15;++j)
c[i][j]=c[i-1][j]+c[i-1][j-1];
while (~scanf("%d%d%d",&n,&m,&p))
{
if (!n&&!m&&!p) break;
clear();
for (int i=p;i<=n;++i) f[i][1]=c[n][i];
for (int i=p;i<=n;++i)
for (int j=2;j<=m;++j)
{
for (int k=p;k<=i;++k)
if (i-k>=0)
f[i][j]+=f[i-k][j-1]*c[n-i+k][k];
}
printf("%lld
",f[n][m]);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode - 503. 다음 더 큰 요소 II (Next Greater Element II) [중간] - 분석 및 코드 (Java)순환 배열 (마지막 요소 의 다음 요 소 는 배열 의 첫 번 째 요소) 을 지정 하고 모든 요소 의 다음 요 소 를 출력 합 니 다.숫자 x 의 다음 더 큰 요 소 는 배열 에 따라 순 서 를 옮 겨 다 니 는 것 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.