HDU 4035 Maze 機率dp+樹形dp,hdu4035

來源:互聯網
上載者:User

HDU 4035 Maze 機率dp+樹形dp,hdu4035

題解:點擊開啟連結


#include <cstdio>#include <iostream>#include <cstring>#include <queue>#include <algorithm>#include <map>#include <cmath>using namespace std;const double eps = 1e-9;const int N = 10010;vector<int> G[N];int n;double k[N], e[N], dp[N];double A[N], B[N], C[N];bool dfs(int u, int fa){int m = G[u].size();A[u] = k[u];B[u] = (1 - k[u] - e[u])/m;C[u] = 1 - k[u] - e[u];double tmp = (1 - k[u] - e[u]) / (double)m, self = 0;for(int i = G[u].size()-1; i >= 0; i--){int v = G[u][i]; if(v == fa)continue;if(!dfs(v, u)) return false;A[u] +=  tmp * A[v];self += tmp * B[v];C[u] += tmp * C[v];}if(fabs(self - 1.0) < eps) return false;A[u] /= 1-self;B[u] /= 1-self;C[u] /= 1-self;return true;}void input(){cin>>n;for(int i = 1, u, v; i < n; i++){scanf("%d %d", &u, &v);G[u].push_back(v); G[v].push_back(u);}for(int i = 1; i <= n; i++) {scanf("%lf %lf", &k[i], &e[i]);k[i] /= 100.0;e[i] /= 100.0;}}int main() {int T, Cas = 1; cin>>T;    while(T--){    input();    bool ok = dfs(1, -1);    printf("Case %d: ", Cas++);    if(!ok || fabs(1.0-A[1]) < eps)    puts("impossible");    else    printf("%.6f\n", C[1] / (1.0-A[1]));    for(int i = 1; i <= n; i++) G[i].clear();    }    return 0;}



200分動態規劃詳解

嗯···我學動歸不是很久,同樣是迷惘過,估計兩個月前剛剛開竅……
你看他寫的什麼無後效性什麼最優子結構的就頭大,我也頭大%…………
動態規劃一般解決兩類問題,一類是最佳化問題,就是問你最大價值最小數什麼的,另一類是方案總數問題。

細分的話類型很多,
我見得多的(我是高二學生,目前在籌備NOIP)
(你那題多我就只說名字了)
背包,樓上連9講都放上來了我就不多說了……
最長不上升不下降子序列問題(比如說潘帕斯雄鷹生日類比賽的飛翔,就是很經典的不下降的變形)
資源分派問題(比如說櫥窗布置,馬棚問題,機器分配問題)
區間動歸(乘積最大,能量項鏈等等)
最長公用子序列問題(有個遺傳編碼好像);
解決方案樹的比如說爬樓梯問題……………………

動態規劃的類型很多很多,因為他很靈活的,我們老師曾經給我們找了100個DP方程,但是那都沒有用,強記根本記不住,關鍵是理解。

深入一點的就有DP的最佳化,時間空間的降維(就是用別的方法去做,或者比如說背包本來是二維的空間最佳化過該成一維的了),樹形DP(這個我也不會)。
(最佳化裡面有個很經典的題《過河》)

我對DP是屬於那種突然就開了竅的……別看說“動態規劃”什麼的唬人,其實就是一個比較一個計算,知道他幹什麼了題上來就有頭緒,方程啊思想啊就有了……

主要也是多看題吧,從簡單的開始,理解他的思想……自己寫動歸的時候注意下面幾個問題:
1、大前提是確定你做的是動歸題……看得多了也就知道自己面對的是什麼類型的題了
2、次前提是想法要對(我做題的時候先想這道題時間空間的維度,然後根據這個去想方程),方程正確,
實在想不起來可以先看題解,去理解人家的思想之後,不要看標程把程式做出來……
3、注意數組不要開的過小,一般都是左右都開大一點,比如他的資料範圍是1~100 ,數組就開0~101.這個是防越界的,因為很多DP賦初值的時候會用到F[0],F[0,0]
4、初始值要正確,因為很多DP其他地方都是正確的因為初始值賦錯了而全部過不了的情況是很常見的……(比如說USACO裡面的貨幣系統)
5、DP迴圈的範圍要正確,一般根據題來判斷範圍寫多少的(比如說櫥窗問題,今天下午寫這個題因為迴圈寫錯了一直AC不了)

USACO裡也有很多DP題,可以做……
以上全部手打,希望能對你有所協助。
我也是正在學習的人,上面的東西不一定全部正確,但是對我而言很受用,也算是我的經驗了。希望日後能一起學習交流外加進步嘍
QQ:340131980
1. 資源問題1
-----機器分配問題
F[I,j]:=max(f[i-1,k]+w[i,j-k])

2. 資源問題2
------01背包問題
F[I,j]:=max(f[i-1,j-v]+w,f[i-1,j]);

3. 線性動態規劃1
-----樸素最長非降子序列
F:=max{f[j]+1}

4. 剖分問題1
-----石子合并
F[i,j]:=min(f[i,k]+f[k+1,j]+sum[i,j]);

5. 剖分問題2
-----多邊形剖分
F[I,j]:=min(f[i,k]+f[k,j]+a[k]*a[j]*a);

6. 剖分問題3
------乘積最大
f[i,j]:=max(f[k,j-1]*mult[k,i]);

7. 資源問題3
-----系統可靠性(完全背包)
F[i,j]:=max{f[i-1,j-c*k]*P[I,x]}

8. ......餘下全文>>
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.