国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

codevs1163 訪問藝術館(樹型dp)

2019-11-06 06:10:55
字體:
來源:轉載
供稿:網友

題目描述 Description

    皮爾是一個出了名的盜畫者,他經過數月的精心準備,打算到藝術館盜畫。藝術館的結構,每條走廊要么分叉為二條走廊,要么通向一個展覽室。皮爾知道每個展室里藏畫的數量,并且他精確地測量了通過每條走廊的時間,由于經驗老道,他拿下一副畫需要5秒的時間。你的任務是設計一個程序,計算在警察趕來之前(警察到達時皮爾回到了入口也算),他最多能偷到多少幅畫。

輸入描述 Input Description

第1行是警察趕到得時間,以s為單位。第2行描述了藝術館得結構,是一串非負整數,成對地出現:每一對得第一個數是走過一條走廊得時間,第2個數是它末端得藏畫數量;如果第2個數是0,那么說明這條走廊分叉為兩條另外得走廊。數據按照深度優先得次序給出,請看樣例

輸出描述 Output Description

輸出偷到得畫得數量

樣例輸入 Sample Input

60

7 0 8 0 3 1 14 2 10 0 12 4 6 2

樣例輸出 Sample Output

2

數據范圍及提示 Data Size & Hint

s<=600

走廊的數目<=100

題解:這道題難的不是狀態轉移方程想不到,而是圖的處理比較麻煩,這是狀態轉移方程:dp[j][cur]=max(dp[j][cur],dp[x][node[cur].l]+dp[j-2*node[cur].v-x][node[cur].r]);

下面是代碼:

#include<iostream>#include<cstdio>using namespace std;struct Node{    int l,r;    int c,v;} node[110];int dp[610][110];int q[110];int cnt=0,s;void buildtree(int k){    int x;    scanf("%d%d",&node[k].v,&x);    ++cnt;    if (!x)    {        node[k].l=cnt;        buildtree(node[k].l);        node[k].r=cnt;        buildtree(node[k].r);    }    else node[k].c=x;}int main(){    scanf("%d",&s);    buildtree(0);    int head=0,tail=1;    q[0]=0;    for (; head<tail; head++)    {        int cur=q[head];        if (node[cur].l) q[tail++]=node[cur].l;        if (node[cur].r) q[tail++]=node[cur].r;    }    for (int i=tail; i>=0; i--)    {        int cur=q[i];        if (node[cur].l==0&&node[cur].r==0)        {            for (int j=2*node[cur].v; j<=s; j++)                if ((j-2*node[cur].v)/5<node[cur].c) dp[j][cur]=(j-2*node[cur].v)/5;                else dp[j][cur]=node[cur].c;        }        else        {            for (int j=2*node[cur].v; j<=s; j++)                for (int x=0; x<=j-2*node[cur].v; x++)                    dp[j][cur]=max(dp[j][cur],dp[x][node[cur].l]+dp[j-2*node[cur].v-x][node[cur].r]);        }    }    PRintf("%d",dp[s][0]);}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天祝| 偃师市| 龙州县| 拉萨市| 三穗县| 许昌县| 长岛县| 合江县| 保定市| 广饶县| 从化市| 古蔺县| 林州市| 陆良县| 临泽县| 紫阳县| 乌恰县| 三穗县| 天长市| 营口市| 新源县| 永嘉县| 瓮安县| 玉门市| 奎屯市| 康保县| 庆城县| 枣阳市| 横山县| 日照市| 广丰县| 内丘县| 民权县| 红安县| 扶沟县| 长治县| 墨玉县| 永丰县| 西宁市| 博湖县| 彭阳县|