zoukankan      html  css  js  c++  java
  • ural1018依赖背包-边权

    其实用点权更简单,但这种做法是边权的

    /*
    依赖背包问题
    dp[u][k]表示u结点往下共走k步的最大值 
    */
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    struct Edge{int w,to,nxt;}edge[500];
    int head[500],tot,n,k,dp[500][500];
    void init(){
        memset(head,-1,sizeof head);
        tot=0;
    } 
    void addedge(int u,int v,int w){
        edge[tot].w=w;edge[tot].to=v;edge[tot].nxt=head[u];head[u]=tot++;
    }
    void dfs(int u,int pre){
        for(int i=head[u];i!=-1;i=edge[i].nxt){
            int v=edge[i].to;
            if(v!=pre)dfs(v,u);
        }
        for(int i=head[u];i!=-1;i=edge[i].nxt){
            int v=edge[i].to;
            if(v==pre)continue;
            for(int j=k;j>=0;j--)
                for(int t=0;t<j;t++)
                        dp[u][j]=max(dp[u][j],dp[u][t]+dp[v][j-t-1]+edge[i].w);
        }
    //printf("%d %d %d %d
    ",u,dp[u][0],dp[u][1],dp[u][k]);
    }
    int main(){
        while(cin>>n>>k){
            init();
            for(int i=1;i<n;i++){
                int u,v,w;
                cin>>u>>v>>w;
                addedge(u,v,w);
                addedge(v,u,w);
            }
            memset(dp,0,sizeof dp);
            dfs(1,0);
            printf("%d
    ",dp[1][k]);
        }
        return 0;
    }
  • 相关阅读:
    表操作
    mysql表的完整性约束
    mysql支持的数据类型
    数据库存储引擎
    Navicat工具、pymysql模块、数据备份
    数据库一
    IO模型
    协成
    线程
    进程
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10333302.html
Copyright © 2011-2022 走看看