1. 程式人生 > >HDU2047-阿牛的EOF牛肉串

HDU2047-阿牛的EOF牛肉串

http://acm.hdu.edu.cn/showproblem.php?pid=2047

寫這道題程式碼不是關鍵的,因為只要知道公式就非常簡單,DP的題就是難在推導過程。如下:

設n位字串,最後一位是O的字串的個數為a[n],最後一位不是O的字串的個數是b[n],
總字串個數為x[n],
則有
x[n]=a[n]+b[n];
a[n]=b[n-1];
b[n]=2*x[n-1];
====>x[n]=2*x[n-1]+2*x[n-2]
a[n]=b[n-1];這裡很關鍵,因為上一次這裡最後一定不是O,所以這一次在上一次最後加上O即可。
**還有一個比較有意思的公式a[i]=a[i-2]*6+a[i-3]*4;**只能說這類題方法很多,我還是需要多學習。
#include <stdio.h>
#include <string.h>
int main()
{   long long a[45];
    a[0]=3;a[1]=8;
    int n;
    while(scanf("%d",&n)!=EOF)
    {for(int i=2;i<=n;i++) a[i]=(a[i-1]+a[i-2])*2;
printf("%lld\n",a[n-1]);
    }
}