当前位置: 首页 > news >正文

SCUT - 216 - 宝华科技树

https://scut.online/p/216

演员

把这个当成dp算了半天,各种姿势,好吧,就当练习一下树dp。

假如是每个节点的层数之和,按照dp[i][j]为从i点出发获得j科技的最小费用dp是比较好的。

改了改居然也可以过。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

vector<pair<int, int> > E[50];

int d[50];
int f[50];
int n, W;

int dp[50][500][3];
//dp[i][j][0]表示i点是叶子的获取总共j点科技需要的最低价格
//dp[i][j][1]表示从i点出发并且i不是叶子的获取总共j点科技需要的最低价格
//dp[i][j][2]表示dp[i][j][1]拷贝
//科技不会超过400

const int INF = 0x3f3f3f3f;

void dfs(int r, int p, int dep, int w) {
    memset(dp[r], INF, sizeof(dp[r]));
    //只走到自己不需要任何价格
    dp[r][dep][0] = 0;
    //不获取任何科技点也不需要任何价格
    dp[r][0][1]=0;
    for(auto e : E[r]) {
        int vi = e.first, wi = e.second;
        dfs(vi, r, dep + 1, wi);
    }
    if(f[r]==-1)
        return;

    int maxk=300;
    for(int k=340;k>=0;--k){
        if(dp[r][k][0]!=INF||dp[r][k][1]!=INF){
            maxk=k;
            //cout<<"maxk="<<maxk<<endl;
            break;
        }
    }
    for(int j = 0; j <= 340; ++j)
        dp[f[r]][j][2]=dp[f[r]][j][1];
    for(int k =maxk; k >= 0; --k) {
        for(int j = k; j <= 340; ++j){
            dp[f[r]][j][2]=min(dp[f[r]][j][2],dp[f[r]][j-k][1]+dp[r][k][0]+w);
            dp[f[r]][j][2]=min(dp[f[r]][j][2],dp[f[r]][j-k][1]+dp[r][k][1]+w);
        }
    }

    for(int j = 0; j <= 340; ++j)
        dp[f[r]][j][1]=dp[f[r]][j][2];
    /*for(int v = 0; v <= 12; ++v) {
        printf("dp[%c][%d][0]=%d\n", r + 'A', v, dp[r][v][0]);
        printf("dp[%c][%d][1]=%d\n", r + 'A', v, dp[r][v][1]);
        printf("dp[%c][%d][0]=%d\n", f[r] + 'A', v, dp[f[r]][v][0]);
        printf("dp[%c][%d][1]=%d\n\n", f[r] + 'A', v, dp[f[r]][v][1]);
    }*/
    return;
}

bool vis[50];

int main() {
#ifdef Yinku
    freopen("Yinku.in", "r", stdin);
#endif // Yinku
    while(~scanf("%d%d", &n, &W)) {
        for(int i = 0; i < 26; ++i) {
            E[i].clear();
            d[i] = 0;
            vis[i] = 0;
        }
        if(n == 1) {
            puts("0");
            continue;
        }
        for(int i = 1; i <= n - 1; ++i) {
            char s[20], t[20];
            int w;
            scanf("%s%s%d", s, t, &w);
            E[s[0] - 'A'].push_back({t[0] - 'A', w});
            d[t[0] - 'A']++;
            f[t[0] - 'A'] = s[0] - 'A';
            vis[s[0] - 'A'] = vis[t[0] - 'A'] = true;
        }
        int r = -1;
        for(int i = 0; i < 26; ++i) {
            if(vis[i] && d[i] == 0)
                r = i;
        }
        f[r]=-1;
        dfs(r, -1, 0, 0);
        int ans = 0;
        for(int i = 340; i >= 0; --i) {
            if(dp[r][i][1] <= W || dp[r][i][0] <= W) {
                ans = max(ans, i);
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}

/*

8 11
A B 8
B C 3
C D 1
D E 1
E F 1
A R 2
R W 9

*/

转载于:https://www.cnblogs.com/Yinku/p/11332580.html

相关文章:

  • oracle
  • 2019牛客暑期多校训练营(第八场) - B - Beauty Values - 水题
  • 免费ARP的作用
  • SCUT - 161 - 灯游 - 数学
  • service命令
  • JavaScript + ASP.NET
  • 用主机头名法实现一个IP建多个Web站点
  • SCUT - 484 - 平面上的点 - 数据结构
  • 财务软件的设计
  • SCUT - 483 - 数轴上的点
  • ruby on rails开发B/S的相关经验
  • Codeforces - 1202D - Print a 1337-string... - 构造
  • 通用权限管理系统组件 (GPM - General Permissions Manager) 中实现大数据的高效分页显示...
  • 《学习之道》第十六章左脑的作用
  • Entity Framework 4.3尝试体会
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • Android 架构优化~MVP 架构改造
  • angular组件开发
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • eclipse的离线汉化
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Java-详解HashMap
  • Mysql数据库的条件查询语句
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • python大佬养成计划----difflib模块
  • react 代码优化(一) ——事件处理
  • SQLServer插入数据
  • 从零开始在ubuntu上搭建node开发环境
  • 第十八天-企业应用架构模式-基本模式
  • 码农张的Bug人生 - 初来乍到
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 使用Gradle第一次构建Java程序
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​人工智能书单(数学基础篇)
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • $.ajax()方法详解
  • (八十八)VFL语言初步 - 实现布局
  • (二)windows配置JDK环境
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)人的集合论——移山之道
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .Net Winform开发笔记(一)
  • .net 发送邮件
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET下的多线程编程—1-线程机制概述
  • ::before和::after 常见的用法
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [20150707]外部表与rowid.txt