本來不打算寫這些的,感覺有點水,就是知道遞推公式就行啦,還有就是__int64的問題,輸出用I64d%
蟠桃記
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 62 Accepted Submission(s) : 46
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
喜歡西游記的同學肯定都知道悟空偷吃蟠桃的故事,你們一定都覺得這猴子太鬧騰了,其實你們是有所不知:悟空是在研究一個數學問題!
什么問題?他研究的問題是蟠桃一共有多少個!
不過,到最后,他還是沒能解決這個難題,呵呵^-^
當時的情況是這樣的:
第一天悟空吃掉桃子總數一半多一個,第二天又將剩下的桃子吃掉一半多一個,以后每天吃掉前一天剩下的一半多一個,到第n天准備吃的時候只剩下一個桃子。聰明的你,請幫悟空算一下,他第一天開始吃的時候桃子一共有多少個呢?
什么問題?他研究的問題是蟠桃一共有多少個!
不過,到最后,他還是沒能解決這個難題,呵呵^-^
當時的情況是這樣的:
第一天悟空吃掉桃子總數一半多一個,第二天又將剩下的桃子吃掉一半多一個,以后每天吃掉前一天剩下的一半多一個,到第n天准備吃的時候只剩下一個桃子。聰明的你,請幫悟空算一下,他第一天開始吃的時候桃子一共有多少個呢?
Input
輸入數據有多組,每組占一行,包含一個正整數n(1<n<30),表示只剩下一個桃子的時候是在第n天發生的。
Output
對於每組輸入數據,輸出第一天開始吃的時候桃子的總數,每個測試實例占一行。
Sample Input
2 4
Sample Output
4 22

#include<stdio.h> int main() { int n,x; while(scanf("%d",&n)!=EOF) { x=1; n--; while(n--) { x=2*(x+1); } printf("%d\n",x); } return 0; }
第二題:
超級樓梯
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 95 Accepted Submission(s) : 43
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
有一樓梯共M級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第M級,共有多少種走法?
Input
輸入數據首先包含一個整數N,表示測試實例的個數,然后是N行數據,每行包含一個整數M(1<=M<=40),表示樓梯的級數。
Output
對於每個測試實例,請輸出不同走法的數量
Sample Input
2 2 3
Sample Output
1 2

#include<stdio.h> int main() { int T,n,a[45],i; scanf("%d",&T); while(T--) { scanf("%d",&n); a[0]=0; a[1]=1; for(i=2;i<=n;++i) { a[i]=a[i-1]+a[i-2]; } if(n!=1) printf("%d\n",a[n]); else printf("0\n"); } return 0; }
第三題:
一只小蜜蜂...
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 107 Accepted Submission(s) : 36
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
有一只經過訓練的蜜蜂只能爬向右側相鄰的蜂房,不能反向爬行。請編程計算蜜蜂從蜂房a爬到蜂房b的可能路線數。
其中,蜂房的結構如下所示。
其中,蜂房的結構如下所示。

Input
輸入數據的第一行是一個整數N,表示測試實例的個數,然后是N 行數據,每行包含兩個整數a和b(0<a<b<50)。
Output
對於每個測試實例,請輸出蜜蜂從蜂房a爬到蜂房b的可能路線數,每個實例的輸出占一行。
Sample Input
2 1 2 3 6
Sample Output
1 3

#include<stdio.h> int main() { __int64 f[60]; int a,b,i,T; scanf("%d",&T); f[0]=0; while(T--) { scanf("%d%d",&a,&b); f[1]=1; f[2]=2; f[3]=3; for(i=4;i<=b-a;++i) { f[i]=f[i-2]+f[i-1]; } printf("%I64d\n",f[b-a]); } return 0; }
不容易系列之(3)—— LELE的RPG難題
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 99 Accepted Submission(s) : 32
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
人稱“AC女之殺手”的超級偶像LELE最近忽然玩起了深沉,這可急壞了眾多“Cole”(LELE的粉絲,即"可樂"),經過多方打探,某資深Cole終於知道了原因,原來,LELE最近研究起了著名的RPG難題:
有排成一行的n個方格,用紅(Red)、粉(Pink)、綠(Green)三色塗每個格子,每格塗一色,要求任何相鄰的方格不能同色,且首尾兩格也不同色.求全部的滿足要求的塗法.
以上就是著名的RPG難題.
如果你是Cole,我想你一定會想盡辦法幫助LELE解決這個問題的;如果不是,看在眾多漂亮的痛不欲生的Cole女的面子上,你也不會袖手旁觀吧?
有排成一行的n個方格,用紅(Red)、粉(Pink)、綠(Green)三色塗每個格子,每格塗一色,要求任何相鄰的方格不能同色,且首尾兩格也不同色.求全部的滿足要求的塗法.
以上就是著名的RPG難題.
如果你是Cole,我想你一定會想盡辦法幫助LELE解決這個問題的;如果不是,看在眾多漂亮的痛不欲生的Cole女的面子上,你也不會袖手旁觀吧?
Input
輸入數據包含多個測試實例,每個測試實例占一行,由一個整數N組成,(0<n<=50)。
Output
對於每個測試實例,請輸出全部的滿足要求的塗法,每個實例的輸出占一行。
Sample Input
1 2
Sample Output
3 6
一般當n不大的時候都可以分開分析
但當塊數很大的時候,就很復雜了
首先是理解它的遞推公式,先把這n塊編號,從1到n,構成一圈
假設滿足的方法有an種,那么分成了n+1塊的時候,可以看成在前面n塊的基礎上
多了一塊,而這一塊必須不能和第1和第n塊顏色一樣,所以只有r-2種
那么這樣看的話就有(r-2)an種
又或者從n-1的基礎上多了兩塊,如果第n塊和第一塊同色,那么第n+1塊就有(r-1)種,如果不同色,那么就是上面提到的情況
所以總的來說遞推公式就是a(n+1)=(r-2)a(n)+(r-1)a(n-1)
明顯的有a(1)=r,a(2)=r(r-1)

#include<stdio.h> int main() { int n,x,i; __int64 a[55]; a[0]=0; a[1]=3; a[2]=6; a[3]=6; while(scanf("%d",&n)!=EOF) { for(i=4;i<=n;++i) a[i]=a[i-1]+2*a[i-2]; printf("%I64d\n",a[n]); } return 0; }