URAL 1225-Flags(规律递推)

来源:互联网 发布:袁姗姗知乎 编辑:程序博客网 时间:2024/05/16 15:03
A - A
Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u
Submit Status Practice URAL 1225

Description

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:
  1. Stripes of the same color cannot be placed next to each other.
  2. A blue stripe must always be placed between a white and a red or between a red and a white one.
Determine the number of the ways to fulfill his wish.
Example. For N = 3 result is following:
Problem illustration

Input

N, the number of the stripes, 1 ≤ N ≤ 45.

Output

M, the number of the ways to decorate the shop-window.

Sample Input

inputoutput
3
4


思路:
      一开始想自己写规律的,但是规律题我几乎都不能用手画出来,所以想了一会儿,还是暴力吧,因为数据不大。

找规律代码:

#include<iostream>#include<algorithm>#include<cstring>#include<string>#include<cstdio>#include<vector>using namespace std;#define T 10005#define inf 0x3f3f3f3f#define lson (rt<<1)#define rson (rt<<1|1)typedef long long ll;int f,cnt,v[100];void dfs(int c){if(c==f){cnt++;return;}for(int i=0;i<3;++i){if((c==0||c==f-1)&&i==1)continue;if(c==0)v[c] = i;else if(v[c-1]==i||(c>0&&c<f&&i==1&&v[c-1]==v[c+1])){continue;}v[c]=i;dfs(c+1);}}int main(){#ifdef zscfreopen("input.txt","r",stdin);#endifint n,i,j,k,t;f = 3;for(f=1;f<=45;++f){memset(v,-1,sizeof(v));cnt = 0;dfs(0);printf("%d\n",cnt);}return 0;}



AC代码:

#include<iostream>#include<algorithm>#include<cstring>#include<string>#include<cstdio>#include<vector>using namespace std;#define T 10005#define inf 0x3f3f3f3f#define lson (rt<<1)#define rson (rt<<1|1)typedef long long ll;int main(){#ifdef zscfreopen("input.txt","r",stdin);#endifint i,j,k,n;ll v[100];v[1] = 2,v[2] = 2;for(i=3;i<=45;++i){v[i] = v[i-1]+v[i-2];}while(~scanf("%d",&n)){printf("%lld\n",v[n]);}return 0;}


0 0
原创粉丝点击