日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu 1297 递推难题

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 1297 递推难题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這題的話,我能玩一年

今天做了很多遞推的題,這題無疑是最復雜的


?

其實可以看出來,2,3,4,5為一類,不妨定義為2型,1,6為一類,定義為1型

規定num[i]為結尾是i的凹槽的數量

我們可以能輕易的推出 sum = num[1]*2+num[2]*4

?

現在我們開始分析這個遞推式的構成

根據第n個凹槽前 能不能構成一把lock,我們將情況分為兩類

?

A:能構成lock

1.如果當前結尾為1類,我們用‘1’分析好了(下面也是用1),n-1的結尾必然不能是‘6’,因為1和6不能直接相連,根據題意就知道了,可以推出num1[i] = lock[i-1] - num1[i-1]

2.如果當前結尾為2類,那和n-1的結尾無任何關系,則num2[i] = lock[i-1]

?

B:加入n后才能構成lock

很容易推出前n-1應該有兩種種類,因為題目說了至少有三種種類的凹槽

?

1.如果當前結尾是‘1’(1類),我們要分兩種討論,有‘6’和無'6',至于原因,還是因為‘6’不能放在n-1結尾處

a.取‘6’

(哎,數學符號打不出來額,文字描述好了)

從剩下的4個內取1個,組合數為4,排列數為(2^(n-2)-1) ?因為n-1處不能放‘6’

b.不取‘6’

從剩下的4個內取兩個,組合數為為6,排列數為(2^(n-1)-2)

?

2.如果當前是‘2’(2類)

從剩下的5個內取兩個,但是1和6不能同時取,所以-1,則組合數為9,排列數為(2^(n-1)-2)


#include <iostream> #include <cstdio> #include <cmath> #include <algorithm>using namespace std;int main() {__int64 lock[26],num1[26],num2[26];__int64 t;num1[3] = 16;num2[3] = 18;lock[3] = 104;t = num1[3];for(int i=4;i<26;i++){num1[i] = lock[i-1] - t; //sub num6[i-1]num2[i] = lock[i-1];num1[i] += 4*((int)pow((float)2,i-2)-1)+6*((int)pow((float)2,i-1)-2);num2[i] += 9*((int)pow((float)2,i-1)-2);lock[i] = 2*num1[i] + 4*num2[i];t = num1[i];}for(int i=3;i<26;i++){printf("N=%d: %I64d\n",i,lock[i]);}//cout << "Hello world!" << endl;return 0; } View Code

?

轉載于:https://www.cnblogs.com/EdsonLin/p/5342924.html

總結

以上是生活随笔為你收集整理的hdu 1297 递推难题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。