题目链接

题意分析

首先 我们肯定会贪心的走从根节点到叶子结点最长的一条链

首先没有过剩的就好办了

但是有的话 我们就一边往下走 一边走分支

分支上每一个点平均走过两次

所以我们把剩下的除以\(2\)即可

CODE:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<string>
#include<queue>
#include<map>
#include<stack>
#include<list>
#include<set>
#include<deque>
#include<vector>
#include<ctime>
#define ll long long
#define inf 0x7fffffff
#define N 500008
#define IL inline
#define M 1008611
#define D double
#define ull unsigned long long
#define R register
using namespace std;
template<typename T>IL void read(T &_)
{T __=0,___=1;char ____=getchar();while(!isdigit(____)) {if(____=='-') ___=0;____=getchar();}while(isdigit(____)) {__=(__<<1)+(__<<3)+____-'0';____=getchar();}_=___ ? __:-__;
}
/*-------------OI使我快乐-------------*/
struct Node{int le,ri,d;
}e[M];
int n,m,tot;
int res[M],ans[M],cnt[N][M];
int dp[N][N][M],pre[N][N][M],pos[N][N][M];
IL void getans(int le,int ri,int at)
{if(le>ri) return;int now=pos[le][ri][at=pre[le][ri][at]];ans[now]=res[at];getans(le,now-1,at);getans(now+1,ri,at);
}
int main()
{
//  freopen(".in","r",stdin);
//  freopen(".out","w",stdout);read(n);read(m);for(R int i=1;i<=m;++i) read(e[i].le),read(e[i].ri),read(e[i].d),res[i]=e[i].d;sort(res+1,res+m+1);tot=unique(res+1,res+m+1)-res-1;for(R int i=1;i<=m;++i) e[i].d=lower_bound(res+1,res+tot+1,e[i].d)-res;
//  for(R int i=1;i<=m;++i) printf("%d%c",e[i].d,(i==m ? '\n':' '));for(R int i=n;i;--i){for(R int j=i;j<=n;++j){for(R int k=i;k<=j;++k)for(R int lim=0;lim<=tot;++lim)cnt[k][lim]=0;for(R int k=1;k<=m;++k)if(i<=e[k].le&&e[k].ri<=j)for(R int l=e[k].le;l<=e[k].ri;++l)cnt[l][e[k].d]++;for(R int k=i;k<=j;++k)for(R int l=tot-1;l;--l)cnt[k][l]+=cnt[k][l+1];for(R int k=tot;k;--k){int maxn=0;for(R int l=i;l<=j;++l){int wson=dp[i][l-1][k]+dp[l+1][j][k]+cnt[l][k]*res[k];if(maxn<=wson) maxn=wson,pos[i][j][k]=l;}if(maxn>=dp[i][j][k+1]) dp[i][j][k]=maxn,pre[i][j][k]=k;else dp[i][j][k]=dp[i][j][k+1],pre[i][j][k]=pre[i][j][k+1];}}}getans(1,n,1);printf("%d\n",dp[1][n][1]);for(R int i=1;i<=n;++i) printf("%d%c",ans[i],(i==n ? '\n':' '));
//  fclose(stdin);
//  fclose(stdout);return 0;
}

HEOI 2019 RP++

转载于:https://www.cnblogs.com/LovToLZX/p/10627486.html

P3698 [CQOI2017]小Q的棋盘相关推荐

  1. [bzoj4813][Cqoi2017]小Q的棋盘

    来自FallDream的博客,未经允许,请勿转载,谢谢. 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上共有V ...

  2. bzoj 4813: [Cqoi2017]小Q的棋盘【树形dp】

    这么简单的dp我怎么没想到x2 f为从这个点出发后回到这个点最多能走过的点,g为从这个点出发后不回到这个点最多能走过的点,注意g有两种转移:g[u][k]=max(g[u][k],f[u][k-j-1 ...

  3. Luogu 3698 [CQOI2017]小Q的棋盘

    BZOJ 4813 虽然数据范围很迷人,但是想树形$dp$没有前途. 先发现一个事情,就是我们可以先选择一条链,最后要走到这一条链上不回来,走到链上的点每一个只需要一步,而如果要走这条链之外的点,一个 ...

  4. [CQOI2017]小Q的棋盘

    输入输出样例 输入样例#1: 5 2 1 0 2 1 3 2 4 3 输出样例#1: 3 输入样例#2: 9 5 0 1 0 2 2 6 4 2 8 1 1 3 3 7 3 5 输出样例#2: 5 说 ...

  5. BZOJ 4813: [Cqoi2017]小Q的棋盘 (树形dp)

    题目传送门 Solution 树形背包dp大水题,是POJ某道题的弱化版...不想说了,据说贪心也能过此题.. 一开始50分,dp数组初始化炸了,表示无语.. Code #include <io ...

  6. P3700 [CQOI2017]小Q的表格(反演、分块)

    P3700 [CQOI2017]小Q的表格 给定一个大小为n×nn \times nn×n的表格,初始时i,ji, ji,j位置上填的是f(i,j)=i×jf(i, j) = i \times jf( ...

  7. [CQOI2017]小Q的表格(数论+分块)

    题目描述 小Q是个程序员. 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理.每当小Q不知道如何解决时,就只好向你求助. 为了完成任务,小Q需要列一个表格,表格有无穷多 ...

  8. BZOJ 4814 Luogu P3699 [CQOI2017]小Q的草稿 (计算几何、扫描线、set)

    题目链接 (BZOJ) http://lydsy.com/JudgeOnline/problem.php?id=4814 (Luogu) https://www.luogu.org/problem/P ...

  9. [CQOI2017] 小Q的表格(分块 + 整除分块 + 数学 + 前缀和)

    problem luogu-P3700 solution f(a,b)=f(b,a)f(a,b)=f(b,a)f(a,b)=f(b,a) 意味着我们只用考虑半个棋盘的信息. b∗f(a,a+b)=(a ...

  10. P3698-[CQOI2017]小Q的棋盘【树形dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P3698 题目大意 nnn个点的树,求从111出发走kkk步最多能到多少个节点.(重复走不算) 解题思路 做法与树形 ...

最新文章

  1. Matlab图像处理基本函数(1)
  2. nohup不输出日志信息的方法,及linux重定向学习
  3. 公平锁的lock()方法走读
  4. 35/100. Permutations
  5. html中dd dt的效果,html中dt dd
  6. 想了好久 请多多指教
  7. 单例 (Singleton)设计模式
  8. Tomcat 6连接池配置
  9. 不会用Photoshop抠图?Python助你一键“除”人!
  10. JAVA的sleep
  11. 阅读go语言程序设计
  12. 【python】字符串转换整数 (atoi) - String
  13. mmap 文件不能为空
  14. 全球最大照片网站 Unsplash 开放图片检索数据集
  15. 如何清理微信文件夹占用的巨大空间
  16. 【硬件通信协议】4. 详细解析CAN总线通信协议
  17. android10全面屏手势 操作图,丨系统设计丨ZUI 10加入更多全面屏手势
  18. 如何借助「星图地球开发者平台」实现智慧环保可视化?
  19. Day27~Day32
  20. 数值分析(二) 三次样条插值法matlab程序

热门文章

  1. python 模拟人生
  2. MVC5+EF6--1 创建Entity Framework数据模型
  3. 工业互联网为什么落地这么难?
  4. Adaboost python实现
  5. 自己闲着没事整理的人工智能的思维导图
  6. 高德API地名转化为坐标
  7. 国内外网站服务器研究现状,国内地学科普网站现状研究
  8. 实习成长之路:设计模式一:为什么你明明使用面向对象设计语言总写面向过程的程序?
  9. Flutter实战之Hello Flutter
  10. Retrofit的简单封装