hdu1085 모함수 (초기화 문제 중요)

1182 단어
이것이 바로 모함수의 응용이다.
(1+x+...+x^num1)(1+x^2+...+x^2num2)(1+x^5+,,+x^5num3), 전개, 계수 0이 아닌 수는 동전으로 조합할 수 있다.
코드 안의 주요 주의해야 할 문제는 초기화 문제이다. 왜냐하면 모함수 안에서 뒤에 있는 큰 줄의 숫자를 조합해야 하기 때문에 얻어진 것이 바로 상식의 전개이기 때문이다.
그리고 숫자 뒤의 0문제를 주의해야 한다. 그리고 첫 번째 숫자의 첫 번째 식은 1로 초기화한다.
코드는 바로,
#include<stdio.h>
#include<string.h>

const int maxn=1000*(1+2+5)+20;
int s1[maxn],s2[maxn];

int main()
{
    int n,m,p;
    while(scanf("%d%d%d",&n,&m,&p)&&n+m+p>0)
    {
        for(int i=0;i<=n;i++){
            s1[i]=1;
            s2[i]=0;
        }


        for(int j=0;j<=n;j++)
            for(int k=0;k<=2*m;k+=2)
            s2[j+k]+=s1[j];

        for(int i=0;i<=n;i++){
            s1[i]=s2[2];
            s2[i]=0;
        }

        for(int j=0;j<=n+2*m;j++)
            for(int k=0;k<=5*p;k+=5)
            s2[j+k]+=s1[j];

        int tag=1;
        for(int i=0;;i++)
            if(s2[i]==0){
                printf("%d
",i); tag=0; break; } if(tag) printf("%d
",n+m*2+p*5+1); } return 0; }

좋은 웹페이지 즐겨찾기