P3698 [CQOI2017]小Q的棋盘
题目链接
题意分析
首先 我们肯定会贪心的走从根节点到叶子结点最长的一条链
首先没有过剩的就好办了
但是有的话 我们就一边往下走 一边走分支
分支上每一个点平均走过两次
所以我们把剩下的除以\(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++
P3698 [CQOI2017]小Q的棋盘的更多相关文章
- 洛谷 P3698 [CQOI2017]小Q的棋盘 解题报告
P3698 [CQOI2017]小Q的棋盘 题目描述 小 Q 正在设计一种棋类游戏. 在小 Q 设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上 ...
- 洛谷P3698 [CQOI2017]小Q的棋盘
传送门 考虑一个贪心,先在根节点周围转一圈,然后再往下走最长链肯定是最优的 然后设最长链的长度为$d$,如果$m\leq d$,那么答案为$m+1$ 否则的话还剩下$m-d+1$步,又得保证能走回来, ...
- bzoj 4813: [Cqoi2017]小Q的棋盘 [树形背包dp]
4813: [Cqoi2017]小Q的棋盘 题意: 某poj弱化版?树形背包 据说还可以贪心... #include <iostream> #include <cstdio> ...
- BZOJ_4813_[Cqoi2017]小Q的棋盘_dfs
BZOJ_4813_[Cqoi2017]小Q的棋盘_dfs Description 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能 在有连线的格 ...
- [BZOJ4813][CQOI2017]小Q的棋盘(DP,贪心)
4813: [Cqoi2017]小Q的棋盘 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 804 Solved: 441[Submit][Statu ...
- 【BZOJ4813】[CQOI2017]小Q的棋盘(贪心)
[BZOJ4813][CQOI2017]小Q的棋盘(贪心) 题面 BZOJ 洛谷 题解 果然是老年选手了,这种题都不会做了.... 先想想一个点如果被访问过只有两种情况,第一种是进入了这个点所在的子树 ...
- bzoj 4813: [Cqoi2017]小Q的棋盘
Description 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能 在有连线的格点之间移动.整个棋盘上共有V个格点,编号为0,1,2-,V- ...
- [bzoj4813][Cqoi2017]小Q的棋盘
来自FallDream的博客,未经允许,请勿转载,谢谢. 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上共有V ...
- 【bzoj4813】[Cqoi2017]小Q的棋盘 树上dfs+贪心
题目描述 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上共有V个格点,编号为0,1,2…,V-1,它们是连通的 ...
随机推荐
- thinkphp 3.2.3 addAll方法的坑
在批量插入一组数据的时候,总是提示以下错误 Insert value list does not match column list: Column count doesn't match value ...
- Java_String_Arrays_Character_BigDecimal_Calendar_Math_System
1.String package cn.itcast_01; /* * Scanner:用于接收键盘录入数据. * * 前面的时候: * A:导包 * B:创建对象 * C:调用方法 * * Sy ...
- Zookeeper 源码(六)Leader-Follower-Observer
Zookeeper 源码(六)Leader-Follower-Observer 上一节介绍了 Leader 选举的全过程,本节讲解一下 Leader-Follower-Observer 服务器的三种角 ...
- 4款APP原型设计工具助你搞定移动应用设计!
随着信息化社会的不断发展,不仅手机迭代更新的速度飞快,就连手机里的App 也层出不穷.作为一名UI/UX设计师或产品经理,如何才能设计一款出色的移动App?光有好的创意是不够的,你还需要一款正确的Ap ...
- 阿里云服务器ECS按ctrl+alt+delete无法登录
今天在使用阿里云服务器远程桌面的时候发现怎么也进入不了,远程桌面无法连接,于是想到了在阿里云服务器管理控制台可以使用连接管理终端进行远程桌面连接,下面详细介绍阿里云服务器操作经验. 操作步骤如下 登录 ...
- Composer安装和使用 - Windows
记录windows下安装和使用Composer的方法 1,使用安装程序 这是将 Composer 安装在你机器上的最简单的方法. 下载并且运行 Composer-Setup.exe,它将安装最新版本的 ...
- m2e 插件
官网 http://www.eclipse.org/m2e/ 在线安装地址 http://download.eclipse.org/technology/m2e/releases 插件简介 Launc ...
- 20169205 2016-2017-2 实验二nmap的使用与分析
20169205 2016-2017-2 实验二Nmap的使用与分析 实验所用知识总结 Nmap扫描基础 当用户对Nmap工具了解后,即可使用该工具实施扫描.通过上一章的介绍,用户可知Nmap工具可以 ...
- Hdu1547 Bubble Shooter 2017-01-20 18:38 44人阅读 评论(0) 收藏
Bubble Shooter Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Tota ...
- unity shader序列帧动画代码,顺便吐槽一下unity shader系统
一.看到UNITY论坛里有些人求unity shader序列帧动画,写shader我擅长啊,就顺势写了个CG的shader.代码很简单,就是变换UV采样序列帧贴图,美术配置行数列数以及变换速度. Sh ...