zoukankan      html  css  js  c++  java
  • hdu4003Find Metal Mineral(树形DP)

    4003

    思维啊 dp[i][j]表示当前I节点停留了j个机器人 那么它与父亲的关系就有了 那条边就走了j遍

     dp[i][j] = min(dp[i][j],dp[child][g]+dp[i][j-g]+g*w[i][child] );

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #include<vector>
     7 #include<cmath>
     8 #include<queue>
     9 using namespace std;
    10 #define N 10010
    11 #define LL __int64
    12 struct node
    13 {
    14     int u,v,w,next;
    15 }ed[N<<1];
    16 int head[N],t,k;
    17 int dp[N][20];
    18 void init()
    19 {
    20     t = 0;
    21     memset(head,-1,sizeof(head));
    22 }
    23 void add(int u,int v,int w)
    24 {
    25     ed[t].u = u;
    26     ed[t].v = v;
    27     ed[t].w = w;
    28     ed[t].next = head[u];
    29     head[u] = t++;
    30 }
    31 void dfs(int pre,int u)
    32 {
    33     int i,j;
    34     for(i = head[u] ; i!=-1 ; i = ed[i].next)
    35     {
    36         int v = ed[i].v;
    37         if(v==pre) continue;
    38         dfs(u,v);
    39         for(j = k ; j >= 0 ; j --)
    40         {
    41             dp[u][j]+=dp[v][0]+2*ed[i].w;
    42             for(int g = 1 ; g <= j ; g++)
    43             {
    44                 dp[u][j] = min(dp[u][j],dp[u][j-g]+dp[v][g]+g*ed[i].w);
    45             }
    46         }
    47     }
    48 }
    49 int main()
    50 {
    51     int i,n,s;
    52     while(scanf("%d%d%d",&n,&s,&k)!=EOF)
    53     {
    54         memset(dp,0,sizeof(dp));
    55         init();
    56         for(i = 1 ; i < n ; i++)
    57         {
    58             int u,v,w;
    59             scanf("%d%d%d",&u,&v,&w);
    60             add(u,v,w);
    61             add(v,u,w);
    62         }
    63         dfs(-1,s);
    64         printf("%d
    ",dp[s][k]);
    65     }
    66     return 0;
    67 }
    View Code
  • 相关阅读:
    查看Linux内核版本的命令
    Viterbi算法
    在matlab 画箭头
    BST和DST简单的matlab程序(图的广度和深度遍历)
    灯光设置(light)
    VC++安装window8.1系统
    prim algorithm
    模拟退火
    Kruskal最小生成树
    matlab练习程序(演化策略ES)
  • 原文地址:https://www.cnblogs.com/shangyu/p/3414054.html
Copyright © 2011-2022 走看看