小辰的智慧树【牛客tracker 每日一题】
2026/7/25 9:06:06 网站建设 项目流程

小辰的智慧树

时间限制:1秒 空间限制:256M

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!

题目描述

n nn棵智慧树,第i ii棵智慧树的初始高度为h i h_ihi,当前高度为h i ′ h_i^′hi。小辰每次可以砍去某一棵智慧树的长度为x ( 0 ≤ x ) x (0≤x)x(0x)的树干,小辰获得x × ( h i ′ + h i ′ − x ) x×(h_i^′+h_i^′−x)x×(hi+hix)的智慧,而后,智慧树的当前高度h i ′ ← h i ′ − x h_i^′←h_i^′−xhihix

现在陶陶不想让小辰太聪明,于是陶陶便限制第i ii棵智慧树高度不能低于c i c_ici

同时,由于小辰的屋子空间有限,不能装下长度之和超过m mm的树干。

求小辰最多能获得多少智慧。

输入描述:

第一行两个整数n ( 1 ≤ n ≤ 10 6 ) , m ( 1 ≤ m ≤ 10 12 ) n (1≤n≤10^6),m (1≤m≤10^{12})n(1n106),m(1m1012),表示智慧树的数量和小辰屋子的空间大小。

接下来n nn行,第i ii行两个整数h i , c i ( 0 ≤ c i ≤ h i ≤ 10 6 ) h_i,c_i (0≤c_i≤h_i≤10^6)hi,ci(0cihi106)表示第i ii棵智慧树的初始高度和第i ii棵智慧树的最低高度。

输出描述:

一行一个整数表示小辰能获得的最大智慧。

示例1

输入:

3 6 10 5 9 2 8 1

输出:

98

解题思路

本题是差分数组 + 贪心的经典模型,将砍树过程拆分成按高度排序的独立单位操作,每次砍伐高度越高收益越大,因此从高到低贪心选取即可。

1. 问题转化
2. 算法实现
  1. 差分统计:用一个数组d记录高度i ii处能砍的树的数量。
    对于第i ii棵树( h , c ) (h, c)(h,c),它能砍的高度区间是[ c + 1 , h ] [c+1, h][c+1,h],我们在差分数组上d[h]++d[c]--
    之后从高到低遍历高度,d[i] += d[i+1],此时d[i]即表示在高度i ii处可砍的单位总数。
  2. 贪心选取:从最高高度(10 6 10^6106)向下遍历:
    • d[i] <= m,则全部砍掉,智慧累加(2*i - 1) * d[i],剩余长度m -= d[i]
    • 否则,只能砍m个单位,智慧累加(2*i - 1) * mm归零并结束。
  3. 输出:最终的累加和即为最大智慧。
3. 复杂度分析

总结

将每次砍伐的收益按照砍伐时的高度拆分成独立单位,利用差分数组快速统计每个高度上的可砍次数,再按高度从高到低贪心选取,保证了在长度限制下的总收益最大。整个过程避免了复杂的动态规划,简洁高效。

代码简要说明

  1. 读入与差分d数组初始全0 00。对每棵树(h, c),执行d[h]++d[c]--
  2. 后缀和还原:从10 6 10^6106向下遍历,d[i] += d[i+1]得到高度i ii处的单位数。
  3. 贪心累加:同样从高向低遍历,对每个高度i ii,若d[i] <= m则全取,否则取剩余m个。累加智慧并更新m
  4. 输出结果cout << sum

代码内容

#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll INF=1e18;constll M=1e6+10;constll mod=1e9+7;intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);ll n;ll m;cin>>n>>m;vector<ll>d(1000005);for(ll i=1;i<=n;i++){ll h,c;cin>>h>>c;d[h]++;d[c]--;}ll sum=0;for(ll i=1000000;i>=0;i--){d[i]+=d[i+1];if(d[i]<=m){sum+=(2*i-1)*d[i];m-=d[i];}else{sum+=(2*i-1)*m;m=0;break;}}cout<<sum<<"\n";return0;}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询