zoukankan      html  css  js  c++  java
  • POJ2663 Tri Tiling

    • 思路:

    设a[i]为N=i时的方法数.i为奇数的时候肯定为0.

    如果i为偶数,a[i]可以看成a[i-2]加上两个单位组成的,此时多出来的2单位有3种方法.

    也可以看成a[i-4]加上四个单位组成的,此时这四个单位一定是连在一起的,中间不能分割,所以只有两种放法.

    同理,可看成a[i-6]加上六个单位组成的,此时这六个单位也连在一起,不能分割,只有两种放法.

    直到所有的砖块都是连在一起的,中间不能分割,也只有两种放法.

    所以

    a[i]=3a[i-2]+2(a[i-4]+a[i-6]+…+a[0]) ①

    a[i-2]=3a[i-4]+2(a[i-6]+…a[0]) ②

    ①-②,得a[i]=4*a[i-2]-a[i-4].

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    int f[40],n;
    int main(){
    	f[0]=1;f[2]=3;
    	for(int i=4;i<=30;i+=2) f[i]=(f[i-2]<<2)-f[i-4];
    	while(1){
    		scanf("%d",&n);
    		if(n==-1) break;
    		printf("%d
    ",f[n]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    各自的特点:
    errno
    内存(堆)的动态申请和释放
    printf和scanf中的%控制
    linux中软件包管理
    Ubuntu新装系统要装软件
    数组
    linux c中需要记住的东西
    硬件设计中的一些思路
    传输线理论
  • 原文地址:https://www.cnblogs.com/yu-xing/p/10360698.html
Copyright © 2011-2022 走看看