poj 1953 c語言 : World Cup Noise

題目大意:

給出一個整數,比如3就是3位,對這3位進行編碼,編碼規則是隻能用0,1,但是不能出現兩個相鄰的1

解題思路:

演草紙寫出前面幾個,
n=1      ans=2      0       1
n=2      ans=3      00    01    10
n=3      ans=5      000   001   010   100   101          
n=4      ans=8      0000  1000  0100  0010  0001  1010  0101  1001
可以看到規律,ans[n]=ans[n-1]+ans[n-2],其實就是斐波拉契數列,但是不能用簡單的遞歸,會time limit exceeded
#include <stdio.h>
int main(){
	int t,c=1,ans[50],i;
	scanf("%d",&t);
	ans[1]=2;
	ans[2]=3;
	while(t--){
		int n;
		scanf("%d",&n);
		if(n>=3) {
			for(i=3;i<=n;i++){
				ans[i]=ans[i-1]+ans[i-2];
			}
		}
		printf("Scenario #%d:\n",c);
		printf("%d\n\n",ans[n]);
		c++;
	}
	
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章