有n堆宝藏,每一堆宝藏有一个挖掘所需要的时间ti,有一个价值qi。

  现在是做一个宝藏图。这个宝藏图是这样的,宝藏图的形状是一棵二叉树,二叉树刚好有k个叶子结点,从n堆宝藏中选k堆放到二叉树的叶子结点上,每个叶子结点只能放一堆宝藏,每堆宝藏只能放到一个叶子结点上。然后派k个人去找宝藏,每个人会分配到一个宝藏供他查找,在这k个宝藏中,每一个宝藏都会被分配给某一个人,k个人从根结点出发,每个人从当前结点往相邻结点走的时候要花费一个单位的时间,到达他指定的宝藏的时候,他要花费那个宝藏所需要的挖掘时间去挖掘那个宝藏,然后他获得那个宝藏的时间就是他行走的时间+挖掘时间。但是大家必须在T的时间内得到宝藏,所以现在要求在大家能在T时间内得到宝藏的情况下,使得宝藏的总价值最大。

  注意:可以不经过任何中间结点直接到达宝藏进行挖掘(样例二)。

 Input
  单组测试数据。
  第一行包含两个整数n 和T (1 ≤ n,T ≤ 100000),表示宝藏的数目和时间限制。
  接下来n行,每行有两个整数ti, qi (1 ≤ ti ≤ T, 1 ≤ qi ≤ 1000),第i个宝藏的挖掘时间和它的价值。
 Output
  输出最大的宝藏总价值。

  连暴力都不会写系列。

  cf官网给出了O(n^2T)的做法。。。从底往上一层一层算,f[h][w]表示第h层,这层已确定要有w个节点。

  每次枚举这一层有x个叶子节点,就能从f[h][w]转移到f[h-1][(w+x+1)/2]...

  之后看了cf上别人的AC代码。。在同一层里直接贪心把相邻最大的连向同个父亲就好了.....

 #include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
#include<cstdlib>
#define ll long long
#define ull unsigned long long
#define ui unsigned int
#define d double
#define ld long double
using namespace std;
const int maxn=,modd=;
struct zs{int t,v;}a[maxn];
int mp[][maxn],num[];
int i,j,k,n,m; int ra,fh;char rx;
inline int read(){
rx=getchar(),ra=,fh=;
while(rx<''&&rx!='-')rx=getchar();
if(rx=='-')fh=-,rx=getchar();
while(rx>='')ra=ra*+rx-,rx=getchar();return ra*fh;
} bool operator <(zs a,zs b){return a.t<b.t;}
bool cmp(int a,int b){return a>b;}
int main(){
int n=read(),T=read();register int i,j;
for(i=;i<=n;i++)a[i].t=read(),a[i].v=read();
sort(a+,a++n);int top=;bool now=,pre=; for(i=;i<=T;i++,now^=,pre^=){
while(top<=n&&a[top].t==i)mp[pre][++num[pre]]=a[top++].v;
sort(mp[pre]+,mp[pre]++num[pre],cmp);
// for(j=1;j<=num[pre];j++)printf("%d ",mp[pre][j]);puts("");
if(i==T)return printf("%d\n",mp[pre][]),;
if(num[pre]&)mp[pre][++num[pre]]=; for(j=,num[now]=;j<num[pre];j+=)mp[now][++num[now]]=mp[pre][j]+mp[pre][j+];
}
}

[51nod1474]宝藏图的更多相关文章

  1. [FJOI2018]所罗门的宝藏

    大概是最后一篇题解,其实只是想颓废一下打个故事 据古代传说记载,所罗门王即是智慧的代表,又是财富的象征.他建立了强大而富有的国家,聚集了大批的黄金象牙和钻石,并把这些价值连城的珍宝藏在一个神秘的地方, ...

  2. 【题解】SDOI2010所驼门王的宝藏(强连通分量+优化建图)

    [题解]SDOI2010所驼门王的宝藏(强连通分量+优化建图) 最开始我想写线段树优化建图的说,数据结构学傻了233 虽然矩阵很大,但是没什么用,真正有用的是那些关键点 考虑关键点的类型: 横走型 竖 ...

  3. BZOJ 1924 && Luogu P2403 [SDOI2010]所驼门王的宝藏 恶心建图+缩点DP

    记住:map一定要这么用: if(mp[x[i]+dx[j]].find(y[i]+dy[j])!=mp[x[i]+dx[j]].end()) add(i,mp[x[i]+dx[j]][y[i]+dy ...

  4. [SDOI2010] 所驼门王的宝藏 [建图+tarjan缩点+DAG dp]

    题面传送门: 传送门 思路: 看完题建模,容易得出是求单向图最长路径的问题 那么把这张图缩强联通分量,再在DAG上面DP即可 然而 这道题的建图实际上才是真正的考点 如果对于每一个点都直接连边到它所有 ...

  5. BZOJ1924 [Sdoi2010]所驼门王的宝藏 【建图 + tarjan】

    题目 输入格式 第一行给出三个正整数 N, R, C. 以下 N 行,每行给出一扇传送门的信息,包含三个正整数xi, yi, Ti,表示该传送门设在位于第 xi行第yi列的藏宝宫室,类型为 Ti.Ti ...

  6. 【BZOJ-1924】所驼门王的宝藏 Tarjan缩点(+拓扑排序) + 拓扑图DP

    1924: [Sdoi2010]所驼门王的宝藏 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 787  Solved: 318[Submit][Stat ...

  7. ZUFE OJ 2145 05机关图

    Description Ink最近得到了一张藏宝图,这张图上共有n个藏宝室,但因为年代久远藏宝图上的路已经模糊不清,于是Ink找到了智慧的Pseudo,Pseudo告诉Ink,这个宝藏中每两个藏宝室之 ...

  8. zzuli 1907: 小火山的宝藏收益 邻接表+DFS

    Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 113  Solved: 24 SubmitStatusWeb Board Description    ...

  9. [SDOI2010]所驼门王的宝藏

    题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为"先知"的Alpaca L. Sotomon是这个家族的领袖,外人也称其为"所驼门王". ...

随机推荐

  1. jquery如此强大,为什么还要写原生呢?

    这是一个伪标题,其实是一篇年终总结. 在这家公司一年多,蛮多收获的.大部分来自自己,小部分来自公司. 做前端开发到现在,我觉得可以分为两部分. 前半部分做项目用原生js,jquery以及各种基于jq的 ...

  2. iOS UI特效

    1.iOS特效 a.对应APP中的基本动作分三类: 1.指向性动效(滑动,弹出等) 2.提示性动效(滑动删除,下拉刷新等) 3.空间扩展(翻动,放大等) b.这类动效在设计过程中需要主意几点: 1.系 ...

  3. UIImage类方法总结及UIImage生成方法对比

    http://mp.weixin.qq.com/s/A900w0Y5pGjuaB4j9Os9ww1.UIImage 生成方法的对比 Apple官方的文档为生成一个UIImage对象提供了两种方法: 1 ...

  4. 快速自检电脑是否被黑客入侵过(Linux版)

    之前写了一篇快速自检电脑是否被黑客入侵过(Windows版), 这次就来写写Linux版本的. 前言 严谨地说, Linux只是一个内核, GNU Linux才算完整的操作系统, 但在本文里还是用通俗 ...

  5. 10本Java书籍推荐

    1. <深入理解Java虚拟机>是近年来国内出版的唯一一本与Java虚拟机相关的专著,也是唯一一本同时从核心理论和实际运用这两个角度去探讨Java虚拟机的著作,不仅理论分析得透彻,而且书中 ...

  6. Linux下安装破解JIRA 6.3.6 并连接MYSQL5

    序言 JIRA是澳大利亚 Atlassian 公司开发的一款优秀的问题跟踪管理软件工具,可以对各种类型的问题进行跟踪管理,包括缺陷.任务.需求.改进等.JIRA采用J2EE技术,能够跨平台部署.它正被 ...

  7. ValueError: too many values to unpack (expected 2)

    记录下总是码错的地方 for key,value in final_table:#final_table is a dict 然后报错 File "./count_co_Mty_read_n ...

  8. Java基础之引用(String,char[],Integer)总结

    1.String的引用: 下列代码执行后的结果为: public class Test { public static void main(String[] args) { StringBuffer  ...

  9. js基础查漏补缺(更新)

    js基础查漏补缺: 1. NaN != NaN: 复制数组可以用slice: 数组的sort.reverse等方法都会改变自身: Map是一组键值对的结构,Set是key的集合: Array.Map. ...

  10. 适合小白/外行的git与github最基础最浅显教程

    首先声明,这是适合小白/外行/初学者/学生看的最基础最简单的git与github教程,已经能使用svn,git等工具的朋友请不要看这篇文章来浪费时间了. 想进一步学习git的,推荐去廖雪峰博客学习. ...