1774:大逃杀

1774:大逃杀
    
    时间限制: 1000 ms         内存限制: 262144 KB
    提交数: 49     通过数: 19
    【题目描述】
    
    将地图上的所有地点标号为1到n,地图中有n-1
    
    条双向道路连接这些点,通过一条双向道路需要一定时间,保证从任意一个点可以通过道路到达地图上的所有点。
    
    有些点上可能有资源,到达一个有资源的点后,可以获取资源来增加 wi的武力值。
    
    资源被获取后就会消失,获取资源不需要时间。可选择不获取资源。
    
    有些点上可能有敌人,到达一个有敌人的点后,必须花费ti秒与敌人周旋,并将敌人消灭。敌人被消灭后就会消失。不能无视敌人。
    
    如果一个点上既有资源又有敌人,必须先消灭敌人才能获取资源。
    
    游戏开始时Y君可以空降到任意一个点上,接下来,有T秒时间行动,Y君希望游戏结束时,武力值尽可能大。
    【输入】
    
    第一行由单个空格隔开的两个正整数 n,T,代表点数和时间。
    
    第二行n个由单个空格隔开的非负整数代表 wi,如果wi=0表示该点没有资源。
    
    第三行n个由单个空格隔开的非负整数代表 ti,如果ti=0代表该点没有敌人。
    
    接下来n-1行每行由单个空格隔开的3个非负整数a,b,c表示连接a和b的双向道路,通过这条道路需要c秒。
    
    【输出】
    
    输出一行一个整数代表T秒后Y君的武力值。
    
    【输入样例】
    
    17 54
    5 5 1 1 1 25 1 10 15 3 6 6 66 4 4 4 4
    0 1 3 0 0 0 1 3 2 0 6 7 54 0 0 0 0
    1 8 3
    2 8 3
    8 7 7
    7 13 0
    7 14 0
    15 14 2
    16 14 3
    17 14 5
    7 9 4
    9 10 25
    10 11 0
    10 12 0
    7 6 20
    3 6 3
    3 4 3
    3 5 3
    
    【输出样例】
    
    68
    
    【提示】
    
    【数据规模】
    对于100%的数据,n,T≤300,0≤wi,ti,c≤106,1≤a,b≤n。

【题解】

因为起点不确定,所以定义三种状态f,g,h[i][j]分别表示在i子树内用了j的时间,f:从i出发,去了子树内在回到i最大收益,g:从i出发,到达子树内任意节点,h从子树内出发,经过i到达子树内任一节点最大收益。根据子树内信息依次转移即可。

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int N=305;
int f[N][N],g[N][N],h[N][N],last[N],size,w[N],t[N],n,T,ans;
struct pigu
{
    int dao,ne,quan;
}a[N<<1];
inline void lingjiebiao(int x,int y,int z)
{
    a[++size].dao=y;
    a[size].quan=z;
    a[size].ne=last[x];
    last[x]=size;
}
//f表示下去了回来,g表示下去了不回来,h表示从下头来
inline void dfs(int now,int fa)
{
    if(t[now]>T) return;
    for(int i=last[now];i;i=a[i].ne)
    {
        if(a[i].dao==fa) continue;
        dfs(a[i].dao,now);
        for(int j=T;j>=t[now];j--)
        {
            for(int k=j-a[i].quan;k>=t[now];k--)
            {
                int h1=f[now][k],h2=g[now][k],h3=h[now][k];//k表示之前用了好多时间了。
                int shen=j-k-a[i].quan;
                if(shen>=t[a[i].dao])
                {
                    g[now][j]=max(g[now][j],h1+g[a[i].dao][shen]);
                    h[now][j]=max(h[now][j],h2+g[a[i].dao][shen]);
                }
                shen-=a[i].quan;
                if(shen>=t[a[i].dao])
                {
                    g[now][j]=max(g[now][j],h2+f[a[i].dao][shen]);
                    f[now][j]=max(f[now][j],f[a[i].dao][shen]+h1);
                    h[now][j]=max(h[now][j],h3+f[a[i].dao][shen]);
                    h[now][j]=max(h[now][j],h[a[i].dao][shen]+h1);
                }
            }
            ans=max(ans,h[now][j]);
        }
    }
}
int main()
{
    cin>>n>>T;
    for(int i=1;i<=n;i++) cin>>w[i];
    for(int i=1;i<=n;i++)
    {
        cin>>t[i];
        if(t[i]<=T)
            f[i][t[i]]=g[i][t[i]]=h[i][t[i]]=w[i];
    }
    for(int i=1,x,y,z;i<=n-1;i++)
    {
        cin>>x>>y>>z;
        lingjiebiao(x,y,z);
        lingjiebiao(y,x,z);
    }
    dfs(1,0);
    cout<<ans;
} 

原文地址:https://www.cnblogs.com/betablewaloot/p/12247208.html

时间: 2024-08-29 20:47:56

1774:大逃杀的相关文章

一本通 1774:大逃杀

\(\quad\) \(n\) 个点,\(n - 1\) 条边,显然就是一棵树了.题干说"可选择不获取资源",但由于获取资源不需要时间,那显然必须要获取. \(\quad\) 发现数据范围比较小,考虑多维 dp.设计如下: \(\qquad\) \(\bullet\) 设 \(dp_{i,j,k}\) 表示从 \(i\) 出发,花费 \(k\) 单位时间到达 \(j\) 的最大收益. \(\qquad\) \(\bullet\) \(dp_{i,j,k} = dp_{i,p,t} +

杀出一个未来!即刻开始微信大逃杀

有多少人每天零散时间.睡前的习惯,都是打开微信,看看朋友圈里都更新了哪些内容?随着微信成为社交通信应用里的巨无霸,它已经紧紧地将我们的社会关系链揉捏在一起,在这张大网上,我们无所遁形.从开始的新鲜,到后来时间被大量"谋杀",再到关系的混乱,越来越多的人在享受微信带来的便利时,开始在思索微信的弊端是否能与便利画上等号. 于是,一场反主流的"微信大逃杀"正在迅速开始波及.而这场大逃杀并没有明显的发起者,最多只是能从群体上去说--正是那些被微信私人.工作.亲友.面膜挤压的

“大逃杀”这么火,为何国内“绝地求生”都靠手游撑面子?

2017年的现象级游戏<绝地求生:大逃杀>(简称<绝地求生>)席卷全球,该游戏的创意总监近日表示,其销量突破了2000万份. <绝地求生>是一款玩法直白简洁的"大逃杀"类游戏,每局游戏有100名玩家参与,玩家被投放到孤岛上进行对抗,最终生存的玩家仅有一人,幸存玩家屏幕上会出现一行字:"Winner Winner,Chicken Dinner",直接翻译过来就是"大吉大利,晚上吃鸡",因此这类游戏也被称作&quo

绝地求生大逃杀BE启动失败,应用程序无法正常启动

今日更新绝地求生大逃杀后部分客户反馈绝地求生点击启动提示BE安装,应用程序无法启动 问题原因:经过排查发现,客户开启过超级工作站运行过游戏,在系统镜像包中保留了旧版的BE服务,致使新版BE无法安装,冲突报错. 解决方法:因此,优先在启动前需要在系统中结束删除旧版BE服务.可通过开超级运行sc delete beservice 命令来删除旧版BE 启动后正常.(开机批处理亦可) 建议:在开启超级工作站后不要运行任何游戏,因为游戏在运行过程可能会安装一些游戏需要的程序,可能会与更新后的该程序或者是其

《绝地求生大逃杀》BE错误怎么办 BE服务未正常运行及安装失败解决方法

<绝地求生大逃杀>BattlEye Launcher是游戏的反作弊程序,也是启动过程中做容易出现错误的,今天小编带来"爆锤吧务"分享的<绝地求生大逃杀>BE服务未正常运行及安装失败解决方法,有此烦恼的玩家赶紧来看吧. 在启动游戏之前切换成英文输入法,美式键盘. DLL文件的各种问题 dxgi.dll,d3d11.dll,uxtheme.dll,JiXunlsp641.4.dll,MSSPIREX64.DLL,NetDogDll64.dll等等. 以.dll结尾的

绝地求生大逃杀,改配置

提取效果设置配置文件 通过Procmon工具分析,绝地求生大逃杀效果设置的配置文件为 "C:\Users\Administrator\AppData\Local\TslGame\Saved\Config\WindowsNoEditor\GameUserSettings.ini",设置好网吧需要的游戏效果后将"TslGame"文件夹提取出来即可(只需保留GameUserSettings.ini). 3.应用到所有客户机 在服务器上挂载客户机镜像(如果不知道怎么挂载镜像

绝地求生大逃杀裸连教程

使用软件PingInfoView,把最下面的服务器IP都复制进去,哪个最稳定最快 就用哪个 软件下载地址 ftp://hhdown:[email protected]/download/HA-PinginfoViewChs-1.55.rar 下面是我用 的速度快的IP 54.230.141.207 打开文件夹目录 C:\Windows\System32\drivers\etc里的hosts的文件,右键以管理员身份用记事本打开. 添加以下记录 #54.182.1.137 front.battleg

[51nod2982] 大逃杀

问题描述 α?76星人入侵地球,尽管英勇的地球卫士们奋勇杀敌,但战火依然烧到了地球本球上,为了维护人类的利益,联合国决定建立m个避难所,第i个避难所能容纳ci个人,坐标为(pi,qi).现在地球上还残余着n个国家,第i个国家有bi个人,坐标为(xi,yi),现在联合国给出了一个初步的疏散方案,即一个n*m的矩阵a,其中ai,j表示第i个国家去第j个避难所的人数(\(b_i=\sum_{1\le j\le m}a_{i,j}\)且\(\sum_{1\le i\le n}a_{i,j}\le c_j

最高机密 曝中国目前最尖端的两大秘密杀器

北京时间12日消息,据国外媒体报道,美国航空航天局(NASA)的一项新研究发现,过去数十年来南极海冰的增加并不足以抵消加速减少的北极海冰.整合两极的数据可以看到,全球海冰面积正以平均每年约35000平方公里的速度减少,换句话说,每年减少的海冰面积比美国马里兰州还大将北极海冰的减少量与南极海冰增加量进行整合之后,可以发现自1979年以来,全球海冰面积正以平均每年约35000平方公里的速度减少,换句话说,每年减少的海冰面积比美国马里兰州还大. "尽管去年九月,南极海冰面积达到了新的最大记录,但全球海