杭电 1284 钱币兑换问题

正确代码:
#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#define MAXSIZE 32780

int c1[MAXSIZE],c2[MAXSIZE];

int n;

void fun()

{

    for(int i=0;i<MAXSIZE;i++)

    {

        c1[i]=1;

        c2[i]=0;

    }   

    for(int i=2;i<=3;i++)

    {

        for(int j=0;j<MAXSIZE;j++)

        {

            for(int k=0;j+k<MAXSIZE;k+=i)

            {

                c2[j+k]+=c1[j];

            }

        }

        for(int j=0;j<MAXSIZE;j++)

        {

            c1[j]=c2[j];

            c2[j]=0;

        }

    }

}

int main()

{

    fun();//先将所有的种数都求出来,节省时间。 

    while(scanf("%d",&n)!=EOF)

    {

        printf("%d\n",c1[n]);

    }

   // system("pause");

    return 0;

}
TLE 代码:
#include<stdio.h>

#include<string.h>

#include<stdlib.h>

int main()

{

   int n;

   int c1[33000],c2[33000];

   while(scanf("%d",&n)!=EOF)

   {

      for(int i=0;i<=n;i++)

      {

          c1[i]=1;

          c2[i]=0;

      }

      for(int i=2;i<=3;i++)

      {

          for(int j=0;j<=n;j++)

          {

              for(int k=0;j+k<=n;k+=i)

              {

                  c2[j+k]+=c1[j];

              }

          }

          for(int j=0;j<=n;j++)

          {

              c1[j]=c2[j];

              c2[j]=0;

          }

      }

      printf("%d\n",c1[n]);

   }

   //system("pause");

   return 0;

}

你可能感兴趣的:(问题)