比赛 20121016 评测结果 AAAAAAAAAA
题目名称 跑步 最终得分 100
用户昵称 feng 运行时间 0.761 s
代码语言 C++ 内存使用 41.45 MiB
提交时间 2012-10-16 20:39:55
显示代码纯文本
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<iostream>
using namespace std;
#define mo 100000000; 
struct node{
	long long a[20];
}f[501][501];
node u;
int i,j,n;
int l[10];
bool s[501];
void cul(int x,int y){
	for (int k=1;k<=20;k++)
		f[i][j].a[k]+=f[x][y].a[k];
	for (int k=1;k<=19;k++)
		if (f[i][j].a[k]>=100000000){
			f[i][j].a[k+1]+=f[i][j].a[k]/mo;
			f[i][j].a[k]=f[i][j].a[k]%mo;
		}
}
int main()
{
	freopen("runa.in","r",stdin);
	freopen("runa.out","w",stdout);
	scanf("%d",&n);
	memset(f,0,sizeof(f));
	f[n][500].a[1]=-1;
	
	for (i=0;i<=500;i++)
		f[0][i].a[1]=1;
	for (i=1;i<=n;i++)
		for (j=1;j<=500;j++){
			cul(i,j-1);
			if (i-j>=0){
				cul(i-j,j-1);
			}
		}
	int p=20;
	while (f[n][500].a[p]==0 && p!=0){
		p--;
	}
	printf("%d",f[n][500].a[p]);
	p--;
	while (p!=0){
		for (int i=1;i<=20;i++)
		u.a[i]=f[n][500].a[i];
		for (int i=1;i<=8;i++){
			l[i]=u.a[p]%10;
			u.a[p]/=10;
		}
		for (int i=8;i>=1;i--)
			printf("%d",l[i]);
		p--;
	}
	return 0;
}