博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 4003 Find Metal Mineral(分组背包+树形DP)
阅读量:4599 次
发布时间:2019-06-09

本文共 1471 字,大约阅读时间需要 4 分钟。

很棒的一个树形DP。学的太渣了。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 int dp[10001][11]; 8 struct node 9 {10 int u,v,w,next;11 }edge[30001];12 int first[10001],t,flag[10001];13 int n,m;14 void CL()15 {16 t = 0;17 memset(first,-1,sizeof(first));18 memset(flag,0,sizeof(flag));19 }20 void add(int u,int v,int w)21 {22 edge[t].u = u;23 edge[t].v = v;24 edge[t].w = w;25 edge[t].next = first[u];26 first[u] = t ++;27 }28 void dfs(int u)29 {30 int i,v,j,k;31 flag[u] = 1;32 for(i = first[u];i != -1;i = edge[i].next)33 {34 v = edge[i].v;35 if(flag[v]) continue;36 dfs(v);37 for(j = m;j >= 0;j --)38 {39 dp[u][j] += dp[v][0] + 2*edge[i].w;40 for(k = 1;k <= j;k ++)41 {42 dp[u][j] = min(dp[u][j],dp[u][j-k] + dp[v][k] + k*edge[i].w);43 }44 }45 }46 }47 int main()48 {49 int s,u,v,w,i;50 while(scanf("%d%d%d",&n,&s,&m)!=EOF)51 {52 CL();53 memset(dp,0,sizeof(dp));54 for(i = 1;i < n;i ++)55 {56 scanf("%d%d%d",&u,&v,&w);57 add(u,v,w);58 add(v,u,w);59 }60 dfs(s);61 printf("%d\n",dp[s][m]);62 }63 return 0;64 }

 

转载于:https://www.cnblogs.com/naix-x/p/3412282.html

你可能感兴趣的文章
Sublime Text3 个人使用心得
查看>>
jquery 编程的最佳实践
查看>>
MeetMe
查看>>
IP报文格式及各字段意义
查看>>
(转载)rabbitmq与springboot的安装与集成
查看>>
C2. Power Transmission (Hard Edition)(线段相交)
查看>>
STM32F0使用LL库实现SHT70通讯
查看>>
Atitit. Xss 漏洞的原理and应用xss木马
查看>>
MySQL源码 数据结构array
查看>>
(文件过多时)删除目录下全部文件
查看>>
T-SQL函数总结
查看>>
python 序列:列表
查看>>
web移动端
查看>>
pythonchallenge闯关 第13题
查看>>
linux上很方便的上传下载文件工具rz和sz使用介绍
查看>>
React之特点及常见用法
查看>>
【WEB前端经验之谈】时间一年半,或沉淀、或从零开始。
查看>>
优云软件助阵GOPS·2017全球运维大会北京站
查看>>
linux 装mysql的方法和步骤
查看>>
poj3667(线段树区间合并&区间查询)
查看>>