正确代码:
#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; }