首页 > 其他分享 >洛谷P1270 “访问”美术馆 树形dp

洛谷P1270 “访问”美术馆 树形dp

时间:2022-11-20 15:46:14浏览次数:73  
标签:洛谷 val int cost maxn P1270 dp

题意

https://www.luogu.com.cn/problem/P1270

分析

经典的树上背包,令\(dp[x][t]\)表示在\(x\)点剩余\(t\)秒的最多画数

在\(x\)结点考虑分给左右结点的时间,故枚举分给左儿子的时间\(i\),那么分给右儿子的时间就是\(t-i-cost[x]\):

\[dp[x][t]=max(dp[x][t],dp[x<<1][i]+dp[x<<1|1][t-i-cost[x]]) \]

答案即是\(dp[1][T]\)

Code

#include<iostream>
#include<cstdio>
#include<vector>

const int maxn = 200 + 10;
int T;
int cost[maxn], val[maxn];
int dp[maxn][2000 + 10];

void read(int x) {
    int a, b;
    scanf("%d%d", &a, &b);
    cost[x] = 2 * a;
    val[x] = b;
    if (val[x]) return;
    read(x << 1);
    read(x << 1 | 1);
}

void dfs(int x) {
    if (val[x]) {
        for (int i = 0; i <= val[x]; i++) {
            if (i * 5 + cost[x] > T)break;
            dp[x][i * 5 + cost[x]] = i;
        }
        return;
    }
    dfs(x << 1);
    dfs(x << 1 | 1);
    for (int i = cost[x]; i <= T; i++)
        for (int j = 0; j <= i - cost[x]; j++)
            dp[x][i] = std::max(dp[x][i], dp[x << 1][j] + dp[x << 1 | 1][i - j - cost[x]]);
}

int main() {
    scanf("%d", &T);
    T--;
    read(1);
    dfs(1);
    printf("%d", dp[1][T]);
    return 0;
}

标签:洛谷,val,int,cost,maxn,P1270,dp
From: https://www.cnblogs.com/MrWangnacl/p/16908627.html

相关文章

  • ZJOI2007 时态同步 树形dp
    题面简述给定以\(s\)为根的一棵树,可以进行代价为1的操作使一条边权+1,求最小代价使得根节点到所有叶子节点距离相等。分析令\(sum[x]\)表示以\(x\)为子树的最大距离(根->......
  • 数位 DP
    本页面将简要介绍数位DP。引入数位是指把一个数字按照个、十、百、千等等一位一位地拆开,关注它每一位上的数字。如果拆的是十进制数,那么每一位数字都是0~9,其他进制可类......
  • Microstation V8i输出三维模型为3Dpdf格式
    在file->print,在对话框中PrinterandPaperSize选择Bentleydriver,点选右上角的Printto3D复选框。最后,点击打印。注意:有的pdf阅读器不一定支持3Dpdf的显示。 ......
  • TCP与UDP协议
    TCP与UDP都是基于传输层的TCP是基于连接的UDP是基于非连接的 TCP的三次握手是建立连接的过程全双工 为什么要建立三次连接,而不是两次连接,因为在客户端请求连接......
  • 还在手撸TCP/UDP/COM通信?一个仅16K的库搞定!
    摘要在一些项目中,可能会用到串口(COM)通信,也可能会使用TCP-Server,TCP-Client,UDP等等,这种实现起来都大差不差,所以我封装了一个无任何依赖小而美的通信框架,通用性强,安全稳......
  • 洛谷:P1789 【Mc生存】插火把
        代码:#include<stdio.h>structhuobaye{intx;inty;};structstoneye{intx;inty;};intabs(intn){intflag;if(......
  • Codeforces 704 B Antman 题解 (dp,贪心,结论)
    题目链接这题两种不同做法,普通的\(O(n^2)\)和奇怪的\(O(nlogn)\)。如果用\(O(nlogn)\)的话可以加强到1e6。做法1时间复杂度\(O(n^2)\)先把最终的排列随便画一个出来观......
  • 洛谷P3917 异或序列
     题意:给出一个大小为n的序列a[n],求∑1≤i≤j≤n Ai​⨁Ai+1​⨁⋯⨁Aj的值​分析:根据异或的性质我们很容易想到一个O(n*n)的做法,即进行一个异或前缀和。......
  • 区间dp-Palindrome
    Palindrome题意:给一个字符串,问最少加上多少个字符,可以使这个字符串成为回文串思路一、直接dp(会爆内存)dp[i][j]表示区间[i,j]之间有最少需要加上多少个字符状态转移......
  • 强化学习代码实战-08 DDPG 算法
    PPO算法是离线学习法,样本效率利用率低,且对连续动作空间情况处理能力弱,无法精细控制DDPG-深度确定性策略梯度算法,离线学习、处理连续动作空间DDPG构造一个确定性策略,采用......