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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

UVA - 10253 Series-Parallel Networks(递推式、记忆化搜索写法)

發(fā)布時(shí)間:2023/12/3 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UVA - 10253 Series-Parallel Networks(递推式、记忆化搜索写法) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目:UVA-10253



題目翻譯(來(lái)自藍(lán)書(shū)):
串并聯(lián)網(wǎng)絡(luò)有兩個(gè)端點(diǎn),一個(gè)叫源,一個(gè)叫匯,遞歸定義如下:

(1) 一條單獨(dú)的邊是串并聯(lián)網(wǎng)絡(luò)。

(2) 若G1和G2是串并聯(lián)網(wǎng)絡(luò),把它們的源和源接在一起、匯接在一起也能得到串并聯(lián)網(wǎng)絡(luò)。

(3) 若G1和G2是串并聯(lián)網(wǎng)絡(luò),把G1的匯和G2的源接在一起也能得到串并聯(lián)網(wǎng)絡(luò)。

其中規(guī)則(2)指的是并聯(lián)、規(guī)則(3)指的是串聯(lián)。串并聯(lián)網(wǎng)絡(luò)中兩點(diǎn)之間可以有多條邊,串聯(lián)或者并聯(lián)在一起的各個(gè)部分可以任意調(diào)換順序。

輸入正整數(shù)n(1<=n<=30),統(tǒng)計(jì)有多少個(gè)n條邊的串并聯(lián)網(wǎng)絡(luò)。

思路:基本和藍(lán)書(shū)的思路一致,不過(guò)我用的是記憶化搜索的寫(xiě)法(不想抄代碼,想用自己的代碼風(fēng)格去寫(xiě))

d[i][j]=sum{C(f(i)+p-1,p)dp[i-1][j-pi] | p*i<=j} ()主要遞推式。
其中f(i)=dp[i-1][i],如果i==1的話 f(1)= 1;
細(xì)節(jié)可看代碼。

#include<bits/stdc++.h> #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define FILL(a,b) (memset(a,b,sizeof(a))) #define re register #define lson rt<<1 #define rson rt<<1|1 #define lowbit(a) ((a)&-(a)) #define ios std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0); #define fi first #define rep(i,n) for(int i=0;(i)<(n);i++) #define rep1(i,n) for(int i=1;(i)<=(n);i++) #define se secondusing namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int > pii; int dx[4]= {-1,1,0,0},dy[4]= {0,0,1,-1}; const ll mod=1000000000; const ll N =1e5+10; const double eps = 1e-4; const double pi=acos(-1); ll gcd(int a,int b){return !b?a:gcd(b,a%b);} ll dp[50][50]; ll c(ll n,ll m)//組合數(shù) {ll ans=1;for(ll i=1;i<=m;i++){ans*=(n-i+1);ans/=i;}return ans; } ll dfs(ll i,ll j) {if(j==0) return 1;//邊界條件,一定要思考好if(i&&j==1) return 1;if(i==0) return 0;if(dp[i][j]>-1){return dp[i][j];}ll &ans=dp[i][j];ans=0;for(ll k=0;k*i<=j;k++){if(i==1) ans+=(dfs(i-1,j-(k*i)));//i==1 的情況f(1)=1;else ans+=(dfs(i-1,j-(k*i))*c(dfs(i-1,i)+k-1,k));}return ans; } void slove() {ll n;FILL(dp,-1);while(cin>>n&&n){if(n==1) cout<<1<<endl;else cout<<2*dfs(n-1,n)<<endl;} } int main() {iosint t=1;//cin>>t;while(t--){slove();}return 0; }

總結(jié)

以上是生活随笔為你收集整理的UVA - 10253 Series-Parallel Networks(递推式、记忆化搜索写法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。