就。。完全没觉得像dp。
代码:
#include<cstdio>
typedef long long lld;
lld sum[50]={0};
lld dp[50]={0};
int main(){
int i;
int t,cas=0;
dp[1]=1;dp[2]=1;sum[1]=1;sum[2]=2;
for(i=3;i<50;++i){
dp[i]=dp[i-1]+dp[i-2];
sum[i]=sum[i-1]+dp[i];
}
scanf("%d",&t);
while(cas++<t){
int n;
scanf("%d",&n);
printf("Case %d: ",cas);
for(i=1;;++i)if(sum[i]>=n)break;
int len=i;
while(len){
if(sum[len-1]<n){
putchar('1');
n-=sum[len-1]+1;
}else putchar('0');
--len;
}
putchar('\n');
}
return 0;
}