hdu 4044 GeoDefense

计算机保研/考研面试题——计算机组成原理篇 本文总结了985和华五学校习计算机保研/考研常问面试时的计算机组成原理题,欢迎点赞、收藏、评论、关注 阅读详情
//该题链接http://acm.hdu.edu.cn/showproblem.php?pid=4044
/* 报告人:SpringWater(GHQ)

  //此题大意:一个以1为根节点的树,每个节点可以有修防御系统,每个节点的
  防御系统(具有不同的价格和防御力)有chioce种可能的选择,敌人的基地为根节点,我方的基地为所有的叶
  子节点,敌人可以随机发射一个攻击(具有一定的攻击力指数),当遇到你在某节点上修的防御拦截系统时,
  它的攻击力会减去你该点的防御力,当它到达你的基地后经历了你所有的防御系统都还有剩余攻击力(即攻击
  力为正值)的话,那你就输了!否则你就防御成功,题目要求,加入给你一定的money,问你能用这些钱所能
  修建出最大的稳定防御力是多少(即敌人只要超过这个值就有可能将你打败);


  解题思路:根据题意可判定是一个树形DP问题;即需算出每个点i,在给予j的钱,所能修建出的出的最大的稳定防御力;
  即dp[i][j];所以再用最小背包解决即可;但此题的难点是,对于i来说他要求出的是在钱为j的前提下,最大攻击力,而对于孩子
  来说,是求最大的最小防御力(听起来很别扭是吧!其实关键处理也在这里了!),这里的最小是指:当按照某种方式分配钱,来
  修防御系统时,最薄弱(最小)的防御孩子是多少;而最大是指:在所有的方式中求得最大的那个最薄弱防御值,这就可以求得
  不考虑i的情况下的dp[i][j]值,之后再在此基础上讨论i选择哪种拦截系统,这就是一个简单的背包dp问题了,故该题用了两次
  dp来将问题简化是我觉得我最精华的部分了(嘻嘻!),动态方程如下:


  第一次dp:在只讨论i的孩子dp[i][j]=max{(power<dp[i][j-price])?power:dp[i][j-price]}  (涉及到既要利用dp[i][j],
  又要初始化为0来求最大值,所以我就私自多用了一个temp[210]来中介)

  第二次dp:只讨论i: dp[i][j]=max{dp[i][j],dp[i][j-price]+power}


  回头感悟:虽然我这代码排在static的第二名,但是还是有几点不足,比如 (1)第二次dp就没有必要多用一个temp来
  中转直接从最大money……0即可解决(2)在处理第一dp的时候,我花的时间太长,可能 是因为第一次独立编这种树
  形dp吧,我想在今后的不断练习中,思维就更加成熟,编码就更加熟练!练习!练习!还是练习!噢!别忘了总结!嘻嘻!

*/
#include<stdio.h>
#include<string.h>
struct tree{
    int k[60][2];
    int son;
}node[1010];//用于保存各节点的信息
struct see
{
    int point;
    int next;
}seek[2010];//用于索引个点的孩子
int count[1010];//记录每个节点有多少种choice
int seek_num;
int money;
int dp[1010][210],temp[210];
int add_son(int sta,int end)//建立索引表
{
    seek_num++;    seek[seek_num].point=end;      seek[seek_num].next=node[sta].son;     node[sta].son=seek_num;
    seek_num++; seek[seek_num].point=sta;     seek[seek_num].next=node[end].son;  node[end].son=seek_num;
    return 0;
};
int fun(int fa,int ffa)//  dp加递归
{
    int i,j,k,min;
    int price,power;
    int first,ii;
    for(i=node[fa].son;i!=0;i=seek[i].next)//索引fa的所有孩子再进行递归
    {
        if(seek[i].point!=ffa)//防止死锁
            fun(seek[i].point,fa);//递归
    }
    first=1;
    for(i=node[fa].son;i!=0;i=seek[i].next)//索引fa的所有孩子i,分别在i以前的兄弟都已经进行dp的基础上进行dp
    {
        if(seek[i].point!=ffa)
        {
            if(first)//当是i第一个孩子时dp[fa][ii]的值为dp[i][ii];
            {
                first=0;
                for(ii=0;ii<=money;ii++)
                    dp[fa][ii]=dp[seek[i].point][ii];
            }
            else
            {
            memset(temp,0,sizeof(temp));
            for(j=money;j>=0;j--) //注意这里没有严格要求一定是从money……0,因为我用了一个temp
            {
                for(k=0;k<=j;k++)//进行dp[i][j]=max{(power<dp[i][j-price])?power:dp[i][j-price]}
                {
                    min=(dp[seek[i].point][k]<dp[fa][j-k])?dp[seek[i].point][k]:dp[fa][j-k];
                    if(min>temp[j])
                        temp[j]=min;
                }
            }
            for(j=0;j<=money;j++)
                dp[fa][j]=temp[j];
            }
        }
    }
    memset(temp,0,sizeof(temp));//这是一大败笔,但是考虑到这也是我的一个成长历程,纪念一下,就没去改了,
                                //有兴趣的你可以试试去掉它!(提示:内外循环交换)

    for(i=0;i<=count[fa];i++)//此只讨论i的各种选择
    {
        if(!i)
            price=power=0;//当fa点一个防御系统都不修建的情况!
        else
            price=node[fa].k[i][0],power=node[fa].k[i][1];
        for(j=money;j>=0;j--)//进行dp[i][j]=max{dp[i][j],dp[i][j-price]+power}
        {
            if(j>=price)
            {
                if(temp[j]<power+dp[fa][j-price])
                    temp[j]=power+dp[fa][j-price];
            }
            else
                break;
        }
    }
    for(j=0;j<=money;j++)
        dp[fa][j]=temp[j];
    return 0;
}

int main()
{
    int T,i,j,n;
    int v,u,choice;
//    freopen("input.txt","r",stdin);
    scanf("%d",&T);//测试数据
    while(T--)
    {
        scanf("%d",&n);//节点数
        for(i=1;i<=n;i++)//初始化,为索引做准备
            node[i].son=0;
        for(i=0;i<2010;i++)//初始化,为索引做准备
            seek[i].next=0;
        seek_num=0;//初始化,为索引做准备
        for(i=1;i<n;i++)
        {
            scanf("%d%d",&v,&u);
            add_son(v,u);//分别为v,u增加儿子
        }
        scanf("%d",&money);//总的钱
        for(i=1;i<=n;i++)
        {
            scanf("%d",&choice);//每个点有多少种选择
            count[i]=choice;
            for(j=1;j<=choice;j++)
                scanf("%d%d",&node[i].k[j][0],&node[i].k[j][1]);//防御系统对应的价格和防御能力值
        }
        memset(dp,0,sizeof(dp));
        fun(1,-1);//调用递归进行树形dp
        printf("%d\n",dp[1][money]);
    }
    return 0;
}




YOLOv12优化:原创自研 | 带有注意力机制的隐藏状态混合器的状态空间(HSM-SSD),实现暴力涨点 | CVPR2025 EfficientViM 可以将 带有注意力机制的隐藏状态混合器的状态空间(HSM-SSD)中的注意力机制换成专栏其他注意力机制 ,那么你就能实现独一无二的原创。 阅读详情

相关推荐

MIC(Maximal Information Coefficient)最大互信息系数

MIC(Maximal Information Coefficient)最大互信息系数是一种用于衡量两个变量之间相关性的统计量。它扩展了传统的互信息(MI)和条件互信息(CMI)的概念,具有更广泛的应用范围。MIC能够捕获包括功能性和非功能性的广泛的关联,具有普遍性和公平性。普遍性意味着在足够的样本量下,MIC能够捕捉到广泛的相关关系,而不仅仅局限于特定的功能类型;公平性则意味着MIC对不同类型的包含同等噪声的关系给出了相似的分数。需要注意的是,虽然MIC具有很多优点,但它也有一些局限性。

qlkaicx的博客 4605

HDU-4044 树形背包dp好题

不会做,题解是参考网上的。感觉这道题是到好题,使得我对树形背包dp更了解了。 有几个注意的点,直接给出代码,题解以及注意点都在注释里了。 #include<bits/stdc++.h> using namespace std; const int N=1e3+10; const int INF=0x3f3f3f3f; int n,m,dp[N][N],p[N][N];...

weixin_30624825的博客 154

【Fluent】太阳辐射模型—Solar Ray Tracing

一、引言Fluent提供了一个太阳能负载模型,可用于计算进入计算域的太阳光线的辐射效应。该模型可以分为:太阳光线追踪和太阳辐照。其中太阳辐照需要使用DO或MC模型,直接向辐射模型提供外光束方向和强度参数。太阳光线追踪不限制辐射模型,可以独立于辐射方程使用,甚至可以在辐射模型off的情况下使用。本文主要介绍太阳光线追踪模型。该模型非常适用于以下领域汽车气候控制 (ACC) 应用建筑物中的人体热舒适建模应用该模型使用着色算法进行太阳光线追踪。光线会透过半透明的面加载在照射面上。

a5567899的博客 7588

hdu4044

题意:给你一颗树有n个节点,树的根节点为1,表示为敌人的基地,其他叶子节点为你的基地,你一开始有m元,给你每个节点可以建造的塔的数量和塔的价格和可以照成的伤害,每个节点至多建立一座塔。敌人的基地每次会派出一个敌人,他会去攻击你的基地,但是你不能确定他会去攻击哪一个基地,所以,请你计算出在花费不超过m的情况下,可以百分百消灭敌人的最大生命值(使得所有基地都免受攻击)。 思路:树上多组背包问题,dp...

weixin_30493401的博客 217

ANSYS APDL实战:手把手教你搞定电磁-热耦合分析(附完整命令流)

本文通过一个工业感应加热线圈的实战案例,手把手教你使用ANSYS APDL完成电磁-热耦合分析。内容涵盖从几何建模、材料定义、网格划分到加载求解及后处理的完整流程,重点讲解了使用PLANE13单元进行双向耦合场分析的方法与命令流调试技巧,助力工程师快速掌握这一核心仿真能力。

weixin_29284201的博客 427

基于YOLOv5与海康工业相机的高分辨率实时检测实践

本文详细介绍了基于YOLOv5与海康工业相机的高分辨率实时检测实践,通过优化相机配置、网络传输和YOLOv5模型适配,实现了每秒15帧以上的实时检测性能,缺陷识别准确率高达99.2%。特别适用于电子元件焊接点检测、精密齿轮齿痕检查等对微小缺陷敏感的场景。

weixin_30872499的博客 474

hdu 4044 GeoDefense (树形dp+01背包)

GeoDefense Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 663    Accepted Submission(s): 267 Problem Description Tower defense

To be what you what to be! 1349

Kettle Web版部署指南

看到以上的日志则表示启动成功。

2401_89221867的博客 1718

HDU 4044 GeoDefense(树形DP+分组背包)★

题目大意:给定n个节点组成的树,1为敌方基地,叶子结点为我方结点。我们可以在每个结点安放炮台,至多一炮,然后就可以打炮,每个结点有ki种炮,每种炮有一个花费和一个能量(能量对应着打掉敌人多少hp)。敌人可能往一个结点的每条分支跑,所以要想保证守住阵地,就要保证每个分支都要安放炮台。最后问怎么打炮,才能使打掉的敌人hp最多。 解题思路:树形DP+分组背包.要守住我方基地,只要从敌方基地开始

Ezereal的博客 963

MounRiver Studio(MRS)使用技巧:添加头文件目录;增加代码分组

MounRiver Studio(MRS)使用技巧:添加头文件目录

cheng___yi的博客 1809

如何使用 Python 爬取 58 同城招聘信息

职位名称:招聘的岗位名称,如“前端开发”、“数据分析师”等。公司名称:招聘公司的名称。薪资待遇:职位的薪资范围,通常以“面议”、“10k-20k”这样的形式表示。工作地点:公司所在的城市及具体地址。公司福利:例如五险一金、带薪年假、绩效奖金等。发布时间:职位信息的发布时间。一个典型的招聘页面 URL 格式通常如下:在这个页面上,职位信息会分页展示,爬虫需要模拟翻页,获取多个页面的招聘信息。

2201_76125261的博客 1291

HDU4044 GeoDefense(有点不一样的树上背包)

题目大概说一棵n个结点的树,每个结点都可以安装某一规格的一个塔,塔有价格和能量两个属性。现在一个敌人从1点出发但不知道他会怎么走,如果他经过一个结点的塔那他就会被塔攻击失去塔能量的HP,如果HP小于等于0敌人就挂了。任务就是在总花费不超过m的条件下在各个结点安装塔,求能预防的敌人的HP的最大值。 状态容易表示,dp[u][m]表示在结点u为根的子树中花费m能预防的最大的HP 转移显然...

dengliugong3918的博客 153

基于Cesium实现,动态水面+大坝排水动画

一、绘制面状水域,使用水波纹理,进行渲染,水体透明,可以看到底色。三、使用粒子系统,将喷泉改变方向,加上重力设置,实现排水动画。二、绘制线状三维体,用作模拟大坝拦截效果。四、最后,模拟水位上升,进行淹没分析,

一醉千秋的专栏 1420

HDU 4044 GeoDefense

设 t 为根节点到某一叶子节点路径上的权值和,则应让最小的 t 尽量的大。 坑点在于存在价格为零的商品。 一维倒序递推就失去了意义,无法保证每组选且只选一个。 另外可以选择不建立任何塔防,也就是说每个节点都多了一个price和power均为零的商品。 dp[s][k] 表示在 s 姐点投入 k 时所能取得的最大值。 #include #include #include #inclu

自在飞花 1300

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【树形DP】HDU 4044 GeoDefense

通道:http://http//acm.hdu.edu.cn/showproblem.php?pid=4044 题意:一棵树(编号1-n),1是敌人出口(只有一个敌人)。叶子节点是我军。在节点处装大炮。每个节点有 k 种大炮选择,可是每个节点最多装一个大炮。每个大炮有一个花费和一个威力值。你一共有m钱,怎么能使威力值最大。敌人去攻击哪个我军是任意的,所以最大威力是每条路值和的最小值。大...

150

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

GeoDefense HDU - 4044 树形DP

题意:一棵树,从根过来一支攻击流,你可以在任意节点建防御点(有多重配置),防御点可以削减攻击强度,到叶节点的总削减值就算叶节点的防御强度 你的目标是让所有叶节点中防御强度最低的点,防御值最高 设dp[i][j]表示i节点分配j资源得到的最大防御强度 显然dp[i][j]由i节点防御值和i的子树防御值加和得到 所以把j分为两部分给节点和子树,则可得到最优解 一次dfs,对每次遍历到的点

Dream in the Night 326

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

HDU 4044 - GeoDefense

GeoDefense Time Limit: 12000/5000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1202Accepted Submission(s): 529 Problem Description Tower defense is a kind...

weixin_30788731的博客 121

HDU 4044 GeoDefense (树形DP 暂时还没解决)

GeoDefense Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 414    Accepted Submission(s): 173 Problem Description Tower defense is a kind of...

weixin_33828101的博客 98

HDU 4044 GeoDefense(动态规划)

HDU 4044 GeoDefense(动态规划) 题目输入描述: 有T组测试数据,每组 首先一个n,表示一颗生成树有n个节点 接下来n-1行表示n-1条边描述这个生成树 接下来一行表示你的总的钱数sum 接下来n行,第i行表示树上的第i号节点可以建 ki 个 塔,每个塔两个数字参数表示花费和造成的伤害。 这是个塔防游戏,敌人从树根(1号节点)出发,叶子节点是你的基地,敌人的路线不固定,经过每个节点的塔后受到伤害 问你在总的花费下,你选择建一些塔,敌人的血量至多是多少才能保证不伤害到你的基地。 解题思

炒饭君的博客 1280

hdu 4044 GeoDefense 树形DP+分组背包

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4044 题意:一棵树,n个节点,叶子节点为基地。在节点处可以放大炮,每个节点都有ki种大炮,每种大炮有一个花费和一个攻击力。每个节点最多只能放一个大炮。一个怪物从节点1出发,可能走任意路径,需要在其到达基地前消灭。求金额m所能消灭怪物的最大HP值。 根据题意,我们要使最薄弱的基地的攻击力最大

弱菜zc 735

hdu4044 GeoDefense 树形dp

GeoDefense Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 686    Accepted Submission(s): 275 Problem Description Tower defense is

WONDERZY 713

HDU4044 GeoDefense 树形dp

HDU4044 树形动归

Rayment的博客 450
上一篇: 成都区域赛区Maze杭电4035(dp求期望)
下一篇: poj 2396 budget
SprintfWater
博客等级 码龄15年 242粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值