递推关系求解(HDU 2047+HDU 2045)

来源:互联网 发布:怎样建淘宝团购微信群 编辑:程序博客网 时间:2024/05/26 07:28

HDU 2047-阿牛的EOF牛肉串
因为两个O不能连在一起,所以分别考虑两种单独的情况。
设当长度为n时的x[n]=a[n]+b[n],其中a[n]代表长度为n时且末尾为O的情况总和,b[n]代表长度为n时末尾不为O的情况总和。
那么现在开始分情况讨论:
当长度为n,末尾为O时,再加一个单位的长度有2种加法,即E,F;
当长度为n , 末尾不为O时,再加一个单位的长度有3种加法,即E,O,F;
所以:x[n+1]=a[n+1]+b[n+1]=2*a[n]+3*b[n]=2*x[n]+b[n];
而b[n]又由x[n-1]推来,x[n-1]=a[n-1]+b[n-1],
在长度为n-1且末尾为O时,要将它变成长度为n且末尾不为O有2种方法(E,F),即2*a[n-1];
同理,在长度为n-1且末尾不为O时,要将它变成长度为n且末尾不为O有2种方法(E,F),即2*b[n-1];
所以:
x[n+1]=2*x[n]+b[n]=2*x[n]+2*x[n-1];

int main(){    arr[1]=3;    arr[2]=8;    for(int i=3;i<N;i++) arr[i]=2*arr[i-1]+2*arr[i-2];    int n;    while(~scanf("%d",&n))    {        printf("%lld\n",arr[n]);    }    return 0;}

HDU-不容易系列之(3)—— LELE的RPG难题

同理,当长度为n时为x[n],设三种颜色为A,B,C。
由x[n]推出x[n+1]:
若长度为n时,序列为 ABC..BAC,那么在后面加一个,只有一种加法,因为既要与开头不一样又要与末尾不一样,所以只能加B,因此从n变为n+1只有一种方法。
然而,还有种情况忽略了,就是当长度为n-1时,序列为ABC..CB时,若在其后加一个A变成ABC..CBA 是不符合题意的,但是我们可以在后面加两个让其变得有意义,如:ABC..CBAC或者ABC..CBAB,可得出从n-1变为n+1有两种方法。
所以,可以推出公式:
x[n]=x[n-1]+2*x[n-2];

int main(){    arr[1]=3;    arr[2]=arr[3]=6;    for(int i=4;i<N;i++)    {        arr[i]=arr[i-1]+2*arr[i-2];    }    int n;    while(~scanf("%d",&n))    {        printf("%lld\n",arr[n]);    }    return 0;}

That’s all :)

0 0
原创粉丝点击