hdu4044

題意:給你一顆樹有n個節點,樹的根節點為1,表示為敵人的基地,其他葉子節點為你的基地,你一開始有m元,給你每個節點可以建造的塔的數量和塔的價格和可以照成的傷害,每個節點至多建立一座塔。敵人的基地每次會派出一個敵人,他會去攻擊你的基地,但是你不能確定他會去攻擊哪一個基地,所以,請你計算出在花費不超過m的情況下,可以百分百消滅敵人的最大生命值(使得所有基地都免受攻擊)。

思路:樹上多組背包問題,dp方程有點難想,要取所有基地消滅生命值最小的最大值,還要注意塔花費為0的情況,具體見代碼。

代碼

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1100;
const int INF=0x3fffffff;
int n,m,cnt;
struct{int v,next;
}edge[maxn*2];
int head[maxn];
struct{int pr,po;
}nd[maxn][55];//記錄節點造塔的信息 
int jc[maxn][220];//jc[i][j]表示在節點j上建塔花費j最大可以造成的傷害 
int sz[maxn];//節點可以建塔的數量 
int dp[maxn][220];//dp[i][j] 表示節點i花費j可以使得當前子樹的所有基地免受攻擊而消滅敵人的最大生命值 
void add(int u,int v){edge[cnt].v=v;edge[cnt].next=head[u];head[u]=cnt++;
}
void dfs(int k,int fz){for(int i=0;i<=m;i++){dp[k][i]=INF;//因為找的是在保證所有基地不被攻擊下可以消滅的最大值生命值,所以先初始化為無窮大 jc[k][i]=0;//初始化 
    }for(int i=0;i<sz[k];i++){for(int j=nd[k][i].pr;j<=m;j++){jc[k][j]=max(jc[k][j],nd[k][i].po);//更新當前節點上建塔的信息 
        }    }bool lg=true;//看是不是葉子節點 for(int i=head[k];i!=-1;i=edge[i].next){int v=edge[i].v;if(v!=fz){dfs(v,k);lg=false;for(int j=m;j>=0;j--){int mx=0; for(int j1=0;j1<=j;j1++){mx=max(mx,min(dp[k][j-j1],dp[v][j1]));//因為你不能確定選j1為多少時最大,所以不能直接用來更新dp[k][j] 
                }dp[k][j]=min(dp[k][j],mx);//    printf("ww%d %d %d %d\n",k,v,j,dp[k][j]);
            }//    printf("\n");
        }}if(lg){for(int i=0;i<=m;i++)dp[k][i]=jc[k][i];//在葉子節點時直接考慮在自己上面建塔 
    }else{for(int i=m;i>=0;i--){int mx=dp[k][i]; for(int j=0;j<=i;j++){//因為存在建塔的消耗為0的情況,當j==i時你在之前可能已經更新過dp[k][i]了,而再最后你又會 mx=max(mx,dp[k][j]+jc[k][i-j]);//用dp[k][i]和jc[k][0]來更新dp[k][i],而你一個點只能建一座塔 ,所以用mx做過渡 //printf("%d %d %d %d %d %d %d\n",k,i,dp[k][i],j,dp[k][j],i-j,jc[k][i-j]);
            }    dp[k][i]=mx;}//    printf("\n");
    }
}
int main(){int t;int u,v;scanf("%d",&t);while(t--){scanf("%d",&n);cnt=0;fill(head,head+2+n,-1);for(int i=1;i<n;i++){scanf("%d%d",&u,&v);add(u,v);add(v,u);}scanf("%d",&m);for(int i=1;i<=n;i++){scanf("%d",&sz[i]);for(int j=0;j<sz[i];j++){scanf("%d%d",&nd[i][j].pr,&nd[i][j].po);}}dfs(1,0);printf("%d\n",dp[1][m]);}return 0;
} 

?

轉載于:https://www.cnblogs.com/cglongge/p/10526847.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248361.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248361.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248361.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RS100項目進展更新

1. 添加手機界面訪問網頁&#xff0c;畢竟PDA的屏幕大小和PC機大小不一致&#xff0c;完成了一自適應網頁&#xff0c;便于在手機上觀看實時畫面&#xff1b; 2. 此項目為一個遠程視頻監控遠程開關項目&#xff0c;遠程PC機或者手機能操作到監控端的開關&#xff0c;所以在遠程…

python os操作

1 # 常用的文件管理操作2 # https://www.cnblogs.com/dkblog/archive/2011/03/25/1995537.html3 import os4 import shutil5 6 # 切換工作目錄,默認是在當前目錄下7 # os.chdir("xx")8 9 # 當前的工作目錄 D:\pythonworkspace\py_base\cn\tele\io 10 print(os.getcw…

洛谷模板,樹狀數組二 差分

題目鏈接&#xff1a;https://www.luogu.org/problemnew/show/P3368 先介紹下差分&#xff1a; 設數組a[]{1,6,8,5,10}&#xff0c;那么差分數組b[]{1,5,2,-3,5} 也就是說b[i]a[i]-a[i-1];(a[0]0;)&#xff0c;那么a[i]b[1]....b[i];(這個很好證的)。 假如區間[2,4]都加上2的話…

KMS安裝后激活機器

slmgr /skms 192.168.26.82 slmgr /ato轉載于:https://www.cnblogs.com/EllieSoft/p/3410320.html

Java內存模型深度解析:總結

處理器內存模型 順序一致性內存模型是一個理論參考模型&#xff0c;JMM和處理器內存模型在設計時通常會把順序一致性內存模型作為參照。JMM和處理器內存模型在設計時會對順序一致性模型做一些放松&#xff0c;因為如果完全按照順序一致性模型來實現處理器和JMM&#xff0c;那么…

sourcetree,創建工作流報錯:Fatal: Not a gitflow-enabled repo yet. Please run 'git flow init' first.-》解決辦法...

1、打開項目下.git/config文件&#xff0c;或者如下圖操作&#xff1a; 2、打開config文件以后&#xff0c;刪除所有 [gitflow *條目并保存文件 3、關閉并重新打開sourcetree 4、倉庫-》Git 工作流-》初始化倉庫即可轉載于:https://www.cnblogs.com/yxfeng/p/10536955.html

關于a標簽的href屬性的注意事項

今天在做一個lightbox效果的時候出現了一個問題。 當往下滾動再點擊按鈕出現lightbox的時候&#xff0c;lightbox的遮罩層不能鋪滿&#xff08;即滾動高度處不能鋪上&#xff09;&#xff0c;如下圖所示。原因是提交按鈕使用的是a標簽&#xff0c;當給a標簽寫上href屬性的時候&…

爬蟲開發4.三種數據解析方式

數據解析三種方式引言&#xff1a;回顧requests實現數據爬取的流程 指定url基于requests模塊發起請求獲取響應對象中的數據進行持久化存儲其實&#xff0c;在上述流程中還需要較為重要的一步&#xff0c;就是在持久化存儲之前需要進行指定數據解析。因為大多數情況下的需求&…

在mac上安裝gitlab

參考鏈接&#xff1a; https://www.cnblogs.com/floodwater/p/10138265.html 注意事項&#xff1a; 在安裝gitlab-ce時&#xff0c;配置hostname域名后&#xff0c;通過域名訪問gitlab時&#xff0c;需要配置本機hosts文件&#xff0c;不然不能訪問 本地hosts文件中配置后 就可…

org.apache.maven.archiver.MavenArchiver.getManifest錯誤

org.apache.maven.archiver.MavenArchiver.getManifest錯誤 網上普遍要add&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c; 正解&#xff1a; 接到一個新需求&#xff0c;開始搭建項目時遇到了如標題錯誤。查詢網絡普遍得到是更新maven插件版本。 之前已安裝過此…

d3.js 入門指南

說到數據可視化&#xff0c;我們會行到很多優秀的框架&#xff0c;像echarts、highcharts&#xff0c;這些框架很優雅&#xff0c;健壯&#xff0c;能滿足我們對可視化的大部分需求&#xff0c;但是缺點也很明顯&#xff0c;就是這些框架幾乎是不可定制化的&#xff0c;當遇到特…

【LeetCode】200. 島嶼的個數

題目 給定一個由 1&#xff08;陸地&#xff09;和 0&#xff08;水&#xff09;組成的的二維網格&#xff0c;計算島嶼的數量。一個島被水包圍&#xff0c;并且它是通過水平方向或垂直方向上相鄰的陸地連接而成的。你可以假設網格的四個邊均被水包圍。 示例 1:輸入: 11110 110…

AI 模擬退火算法

模擬退火算法轉載于:https://www.cnblogs.com/yangwenhuan/p/10548171.html

keep用法

keep 是英語中用法靈活的動詞之一&#xff0c;下面筆者就其用法歸納如下&#xff1a; 一、用作系動詞&#xff0c;意為“保持&#xff08;某種狀態&#xff09;”&#xff0c;其后常接形容詞作表語。如&#xff1a; Please keep quiet / silent! 請保持安靜&#xff01; Aft…

Kubernetes系列之Helm介紹篇

本次系列使用的所需部署包版本都使用的目前最新的或最新穩定版&#xff0c;安裝包地址請到公眾號內回復【K8s實戰】獲取 介紹 Helm 是 Deis 開發的一個用于 Kubernetes 應用的包管理工具&#xff0c;主要用來管理 Charts。有點類似于 Ubuntu 中的 APT 或 CentOS 中的 YUM。Helm…

HTNL筆記整合

簡述概括了HTML 的部分內容&#xff0c;不是很完善&#xff0c;希望能給予你們相對的幫助。 一下文件的整合百度云鏈接&#xff1a;HTML整合筆記 第一章 HTML入門 課時1&#xff1a;HTML初識 1、英文名&#xff08;Hyper Text Markup Language&#xff09;超文本標簽語言 對…

EXCEL 圖表 只在拐點的時候顯示數字

EXCEL圖表只在折線的拐點顯示數值&#xff0c;中間不需要顯示。同時往下拐的&#xff0c;顯示在上方&#xff0c;往上的顯示在下方&#xff0c;這樣數值不會擋住線。 首先&#xff0c;做一些模擬數據 因為起點和終點數值必須顯示&#xff0c;所以單元格&#xff0c;C2 D2 C19 D…

淺談Vue之雙向綁定

VUE實現雙向數據綁定的原理就是利用了 Object.defineProperty() 這個方法重新定義了對象獲取屬性值(get)和設置屬性值(set)的操作來實現的。那么Object.defineProperty究竟是該如何使用的呢&#xff1f;先看個例子 <!DOCTYPE html> <html lang"en"><h…

【AtCoder】AGC017

A - Biscuits dp[i][0/1]表示當前和是偶數還是奇數&#xff0c;直接轉移即可 #include <bits/stdc.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space putchar( ) #define enter putchar…

SQL語法(1、安裝操作)

1、數據庫的系統概述及安裝與基本使用 bilibili可查找安裝視頻百度了解一下 – 使用超級管理員登錄 CONN sys/change_on_install AS SYSDBA ; – 創建c##scott用戶 CREATE USER c##scott IDENTIFIED BY tiger ; – 為用戶授權 GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE…