公式
//0 白 1 红
// c(n)=f(n,0)+f(n,1);
// f(n,0)=f(n-1,1)+f(n-2,1); //n-1块布以红色结尾的数量+n-2块布最后一蓝+红结尾的数量 下同
// f(n,1)=f(n-1,0),f(n-2,0);
// f(0,1)=f(0,0)=0;
// f(1,0)=f(1,1)=1;
//
其中c(n)表示方案数。
f(n,i)表示用n快布以颜色为i的布结尾的方案总数。
1225. Flags
Time limit: 1.0 second
Memory limit: 64 MB
On the Day of the Flag of Russia a shop-owner decided to decorate the show-window of his shop with textile stripes of white, blue and red colors. He wants to satisfy the following conditions:
Determine the number of the ways to fulfill his wish.
Example. For
N = 3 result is following:
![]() Input
N, the number of the stripes, 1 ≤
N ≤ 45.
Output
M, the number of the ways to decorate the shop-window.
Sample
|
#include<iostream>
using namespace std;
//0 白 1 红
// c(n)=f(n,0)+f(n,1);
// f(n,0)=f(n-1,1)+f(n-2,1);
// f(n,1)=f(n-1,0),f(n-2,0);
// f(0,1)=f(0,0)=0;
// f(1,0)=f(1,1)=1,f(1,2)=0;
//
int n;
long long f[50][2];
int main()
{
f[0][0]=f[0][1]=0;
f[1][0]=f[1][1]=1;
for(int i=2;i<=46;i++)
{
f[i][0]=f[i-1][1]+f[i-2][1];
f[i][1]=f[i-1][0]+f[i-2][0];
}
while(cin>>n)
cout<<f[n][0]+f[n][1]<<endl;
return 0;
}