#动态规划# hdu-4616-Game(树形dp)

这个题,大佬说是水题,对我这种菜鸡来说,看了好久才懂。。。。#include <iostream>#include <cstring>#include <stdio.h>#include <vector>#define inf 0x3f3f3f3fusing namespace std;/*①如果k==c,那么起点和终...
摘要由CSDN通过智能技术生成

这个题,大佬说是水题,对我这种菜鸡来说,看了好久才懂。。。。

 

#include <iostream>
#include <cstring>
#include <stdio.h>
#include <vector>

#define inf 0x3f3f3f3f

using namespace std;

/*
①如果k==c,那么起点和终点至少有一个是陷阱(可能有些人会认为终点一定会是陷阱,这样是没错的,因为起点和终点时相对的,你也可以把起点看做终点)。
②如果k<c,那么起点和终点是否是陷阱是任意的,可以有也可以没有。
*/

//这个题和CCF上做的第四题差不多,dp[i][j]做树形dp是模板,这里加了陷阱的条件,自然要多一维。
const int N = 50010;

vector<int> g[N];
int val[N],trap[N];
long long dp[N][4][2];

int T,n,c;
long long ans;

void dfs(int parent,int child){

    dp[child][trap[child]][trap[child]] = val[child];
    ans = max(ans,dp[child][trap[child]][trap[child]]);//是原来的路好,还是以child做起点更好???????????

    for(int i=0;i<g[child].size();i++){
        int v = g[child][i];

   
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值