树形动规_(技能树)

技能树(SGOI)
skill.pas/c/cpp
【问题描述】
玩过 Diablo 的人对技能树一定是很熟悉的。一颗技能树的每个结点都是一项技能,要学会这项技能则需
要耗费一定的技能点数。只有在学会了某一项技能以后,才能继续学习它的后继技能。每项技能又有着不同的级
别,级别越高效果越好,而技能的升级也是需要耗费技能点数的。
有个玩家积攒了一定的技能点数,他想尽可能地利用这些技能点数来达到最好的效果,因此他给所有技能的
所有级别都打上了分,他认为效果越好的则分数越高。现在他要你帮忙寻找一个分配技能点数的方案,使得分数
总和最高。
【输入格式】
第一行是一个整数 n(1<=n<=20),表示所有不同技能的总数。接下来依次给出了这 n 个不同技能的详细
描述。每个技能描述共包括 5 行,第一行是该技能的名称,第二行是该技能在技能树中的父技能的名称,为空
则表示该技能不需要任何的先修技能便能学习。第三行是一个整数 L(1<=L<=20) ,表示这项技能所拥有的最
高等级。第四行共有 L 个整数,其中第 i 个整数表示把这项技能从第 i-1 级升到第 i 级所需要的技能点数(0
级表示没有学习过)。第五行也包括了 L 个整数,其中第 i个整数表示该玩家对这项技能的第 i 级的效果评分,
分数不超过 20。在技能描述之后是玩家所用角色的描述,共有两行。第一行是一个整数 P(0<=P<=100),表
示目前所拥有的技能点数。接下来一行是 n 个整数,依次表示角色当前所习得的技能级别,0 表示尚未学习。这里

不会出现非法的情况,譬如在没有学习某项技能的时候已经习得了它的后继技能。
【输出格式】
只需包括一个整数 S,表示你的技能点最佳分配方案所得到的分数总和。
【输入样例】
3
Freezing Arrow
Ice Arrow
3
3 3 3
15 4 6
Ice Arrow
Cold Arrow
2
4 3
10 17
Cold Arrow
 
3
3 3 2
15 5 2
10
0 0 1
【输出样例】
42
【时间限制】
1s
【空间限制】
64M

//------------------------------------------------------------------------------------------------

分析:树形动规,多叉树转二叉树.

f[i,j]表示以i为根的子树,花j点技能点,能得到的最大分数.

枚举给左右儿子分配的点数进行转移,记忆化搜索.

code:

type  skill=recordn,f:string;l:longint;v,p:array[0..21] of longint;
end;
const maxn=21;maxp=101;
var   s:array[0..maxn] of skill;f:array[0..maxn,0..maxp] of longint;learn,l,r:array[0..maxn] of longint;n,i,j,fa,tmp,p,ans:longint;function find(st:string):longint;var   o:longint;beginfor o:=1 to n doif s[o].n=st then exit(o);exit(0);end;function maxx(a,b:longint):longint;beginif a>b then exit(a); exit(b);end;function DP(t,m:longint):longint;var   max,now,o,cost,value,q:longint;beginif f[t,m]>=0 then exit(f[t,m]);max:=DP(r[t],m);  //不学这种技能if learn[t]>0 then  //已经学过的话,向下接着学for o:=1 to m dobeginnow:=DP(l[t],o)+DP(r[t],m-o);max:=maxx(max,now);end;cost:=0;value:=0;for o:=learn[t]+1 to s[t].l do  //把这个技能接着学下去begincost:=cost+s[t].v[o];value:=value+s[t].p[o];for q:=0 to m-cost dobeginnow:=DP(l[t],q)+DP(r[t],m-cost-q)+value;max:=maxx(max,now);end;end;f[t,m]:=max;exit(max);end;beginassign(input,'skill.in'); reset(input);assign(output,'skill.out'); rewrite(output);readln(n);for i:=1 to n dobeginreadln(s[i].n);readln(s[i].f);readln(s[i].l);for j:=1 to s[i].l do read(s[i].v[j]);readln;for j:=1 to s[i].l do read(s[i].p[j]);readln;end;readln(P);for i:=1 to n do read(learn[i]);for i:=1 to n dobeginfa:=find(s[i].f);if l[fa]=0 then l[fa]:=ielsebegintmp:=l[fa];while r[tmp]<>0 do tmp:=r[tmp];r[tmp]:=i;end;end;fillchar(f,sizeof(f),255);for i:=0 to maxp do f[0,i]:=0;ans:=DP(l[0],P);writeln(ans);close(input);close(output);
end.

转载于:https://www.cnblogs.com/exponent/archive/2011/08/06/2129483.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode—299. 猜数字游戏

299. 猜数字游戏 题目描述&#xff1a; 你在和朋友一起玩 猜数字&#xff08;Bulls and Cows&#xff09;游戏&#xff0c;该游戏规则如下&#xff1a; 写出一个秘密数字&#xff0c;并请朋友猜这个数字是多少。朋友每猜测一次&#xff0c;你就会给他一个包含下述信息的提示&…

有关集中用户的问题

集中用户应该有一个“所属管理插件”的字段&#xff0c;记录此用户的出处&#xff0c;比如“内部员工”&#xff0c;即由“内部控制台”插件管理。 那么用户 staff_tommy 的“所属管理插件”的字段值为“InternelWebControlPanel”. 系统内核插件提供一个扩展点为“UserPro…

html5 学习笔记三(web存储)

HTML5 提供了两种在客户端存储数据的新方法&#xff1a; localStorage - 没有时间限制的数据存储sessionStorage - 针对一个 session 的数据存储之前&#xff0c;这些都是由 cookie 完成的。但是 cookie 不适合大量数据的存储&#xff0c;因为它们由每个对服务器的请求来传递&a…

mobile web retina 下 1px 边框解决方案

http://www.tuicool.com/articles/ZRv6bun 再谈mobile web retina 下 1px 边框解决方案 时间 2015-01-03 12:03:31 Hugo Web前端开发原文 http://www.ghugo.com/css-retina-hairline/主题 WebKit iOS CSS本文实际上想说的是ios8下 1px解决方案。 1px的边框在devicePixelRatio…

LeetCode—55. 跳跃游戏

55. 跳跃游戏 题目描述&#xff1a; 给定一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 考察重点&#xff1a;由前至后遍历数组&#xff0c;maxPos记录我们当…

ASP.NET----利用隐藏域向页面间数据传递

摘要&#xff1a; 隐藏域不会显示在用户的浏览器中&#xff0c; 一般是在页面中加入一个隐藏控件&#xff0c; 与服务器进行交互时把值赋给隐藏控件并提交给下一页面。隐藏域可以是任何存储在网页中的与网页有关的信息的存储库。 使用&#xff1a; 使用隐藏域存入数值时用&…

[转载]如何用关键字优化网站?

如何用关键字优化网站&#xff1f;     搜索引擎使用关键字的相关程度来决定网页的先后顺序。例如&#xff0c;如果有人搜索“ butterbeans ”&#xff0c;那么一个标题为“ the butterbean bazaar ”、里面有十余处单词“ butterbeans ”的网页&#xff0c;可能就会排在搜索…

Rust下载和安装

2019独角兽企业重金招聘Python工程师标准>>> 1、在Linux和Mac上安装Rust&#xff1a; 在Linux和Mac上安装Rust(稳定的二进制)的一个简单的方法&#xff0c;只需要在shell中运行以下命令&#xff1a; $ curl -sSf https://static.rust-lang.org/rustup.sh | sh 一个…

WP7 空闲检测 当手机处理锁屏状态时 如何让程序继续运行 如 在锁屏状态下继续录音。...

我们都知道&#xff0c;当手机锁屏后&#xff0c;我们的app 会自动进行休眠或是说墓碑状态。也就是说app已经空闲&#xff0c;这样最大的好处是省电。关于些可以在MSDN上找到非常详细的说明&#xff1a;http://msdn.microsoft.com/zh-cn/library/ff941090(vvs.92).aspx 我这里要…

LeetCode—300. 最长递增子序列

300. 最长递增子序列 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组…

思念

你不在的时候 我很想你 想你的时候 我偷偷的看你,拿着照片 然后轻轻的放在 自己的枕边 你不在的时候 我常常幻想 有一天 我们一起去海边 看潮起潮落 欢乐嬉戏 看着你 自由自在的 捡海边的贝壳 和留在沙滩上的足迹 你不在的时候 我常常思念 带你去看美丽的风景 牵着你的手 走过黄…

TreeView 实现单选与多选!

最近在做临测项目,涉及到了,实现用户的单选与多选,用户中从域中域中读取的.查找了一些资料,实现了此方法,大家一起分享一下.UserTree.aspx<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4…

Skype for Business Server 2015-08-反向代理-发布-统一沟通

申明&#xff1a;文章中部分内容有涉及官方帮助或者网上资源整合&#xff0c;如有违权&#xff0c;请速与作者联系&#xff0c;谢谢&#xff01;作者&#xff1a;316191099qq.com培训&#xff1a;Skype for Business Server 2015-项目实战-培训-QQ群:65235615。&#xff08;学员…

架构师小跟班:如何高效又安全的清理Linux服务器上的缓存?

操作服务器上的生产环境&#xff0c;一定要慎之又慎&#xff0c;安全第一&#xff0c;优化第二&#xff01; 一些基本原理 说到清理内存&#xff0c;那么不得不提到/proc这一个虚拟文件系统&#xff0c;这里面的数据和文件都是内存中的实时数据&#xff0c;很多参数的获取都可以…

解题报告 Diamonds

1. 题目 diamonds 题目描述 小keke同学非常喜欢玩俄罗斯方块&#xff08;*^*&#xff09;,他最近发现传统的俄罗斯方块很无趣&#xff0c;于是他想到了一个新规则的游戏来恶心你&#xff08;……&#xff0c;没素质啊&#xff09;。 游戏是这样的&#xff1a; 给定你一个宽度为…

LeetCode—233. 数字 1 的个数(困难)

233. 数字 1 的个数&#xff08;困难&#xff09; 题目描述&#xff1a; 给定一个整数 n&#xff0c;计算所有小于等于 n 的非负整数中数字 1 出现的个数。 考察重点&#xff1a;分别计算个、十、百…千位上1出现的次数&#xff0c;再求和。 func countDigitOne(n int) int…

趣味教程:从女娲造人谈类、属性、方法及实例

前言:相信大家都听说过女娲造人的故事&#xff0c;不过细节可能不会太清楚&#xff0c;我现在略述如下&#xff0c;您可要仔细听哦&#xff0c;这和我们今天要聊的主题有莫大的关系呀。 女娲是一个人身龙尾的女神。盘古开天辟地以后&#xff0c;也就在天地间到处游历。她虽然是…

JavaScript--fullPage.js插件

GitHub:https://github.com/alvarotrigo/fullPage.js FullPage.js是一个基于JQuery的插件,可以很方便的制作出全屏网站; 一 特点: 1.支持鼠标滚动;2.支持键盘控制前进和后退;3.多个回调函数;4.支持手机/平板触摸事件;5.支持CSS3动画;6.支持窗口缩放,缩放时自动调整;7.jQuery兼…

细细讲述Java技术开发的那些不为人知的规则

本文介绍的Java规则的说明分为3个主要级别&#xff0c;中级是平时开发用的比较多的级别&#xff0c;在今后将陆续写出其他的规则。遵守了这些规则可以提高程序的效率、使代码又更好的可读性等。 一、在finally方法里关掉input或者output资源 方法体里面定义了input或者output流…

SQL Server 获取所有表和数据的批量操作

最近要写触发器&#xff0c;对数据库中每个用户表都要写&#xff0c;一查170多个表&#xff0c;晕了~&#xff0c;想偷懒自制程序完成这些一些批量的操作&#xff0c;所以搜集了一下对数据库其他操作的东东&#xff01; --一时兴起&#xff0c;随处搜集 1、创建数据库 CREATE D…