一、题意

首先是对题目的翻译。给出一个长长的字符串,这个字符串描述了一个吊灯。对于给字符串只有两种操作数——'a'为一个吊灯灯珠,将改灯珠入栈,一位阿拉伯数字K,代表一个环,将把该数字前面k位数都出栈并且穿成一个环,并将该环重新入栈(作为一个单元)。由此可以得到一颗神奇的树——每个节点的若干子节点呈现循环数组的关系。因而此处有对于同构的定义为:再该环上各个小串的相对位置不变。于是,要求一个新的字符串,能够成上述字符转的一个同构的树,在这个基础上求出最小的“最大栈空间”大小。

二、思路

首先设dp[i]为将第i个节点及其子树全部入栈的最小栈大小。对于其第一个入栈的子树,认为此时的最高栈高度为k,则dp[i]=main(dp[i],dp[tar]+i)。此时应当枚举起点并且找到使得值最小的起点。

(红书说是使用单调栈实现O(N)的求出这个值得具体大小,但是经过隔壁队YC大佬指点发现不是单调栈而是一个简单思路(复杂度O(n))对于每个起点的特定顺序,必然有,最大值为上一个的最大值-1,或者上一个的起点+m-1。于是这样就可以O(1)的找出每一组的最大值,直接对比就好)

//#include<bits/stdc++.h>
#include<vector>
#include<stack>
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
#define veci vector<int>
#define stai stack<int> const long long MAXN=1e4+;
veci G[MAXN];
stai ss;
char str[MAXN];
int length;
int dp[MAXN];
int pos[MAXN]; int deal(int now)
{
int len=G[now].size();
int maxx=dp[G[now][]];
for(int i=;i<len;++i)
{
maxx=max(maxx,dp[G[now][i]]+i);
}
int ans=maxx;
for(int i=;i<len;++i)
{
maxx=max(maxx-,dp[G[now][i-]]+len-);
if(ans>maxx)
{
pos[now]=i;
ans=maxx;
}
}
return ans;
} void dfs(int now)
{
int len=G[now].size();
if(len==)
{
dp[now]=;return ;
}
for(int i=;i<len;++i)
{
int tar=G[now][i];
dfs(tar);
}
dp[now]=deal(now);
} void show(int now)
{
int len=G[now].size();
if(len==)
{
cout<<"a";return ;
}
for(int i=;i<len;++i)
{
int pp=pos[now]+i;
pp%=len;
int tar=G[now][pp];
show(tar);
}
cout<<G[now].size();
} void init()
{
// gets(str+1);
length=strlen(str+);
memset(dp,,sizeof(dp));
memset(pos,,sizeof(pos));
int ll=;
for(int i=;i<=length;++i)
{ G[i].clear();
ll=max(ll,(int)ss.size());
if(str[i]!='a')
{
int len=str[i]-'';
stai s2;
for(int j=;j<len;++j)
{
// int tar=ss.top();
s2.push(ss.top());
ss.pop();
// G[i].push_front(tar);
// G[i].push_back(tar);
}
while(!s2.empty())
{
G[i].push_back(s2.top());
s2.pop();
} } ss.push(i);
}
dfs(length);
cout<<dp[length]<<"\n";
show(length);
cout<<"\n";
// cout<<endl<<ll<<endl; } int main()
{
cin.sync_with_stdio(false);
while(cin>>(str+))init(); return ;
}

POJ 2161 Chandelier(树状DP)的更多相关文章

  1. POJ 1155 TELE [树状DP]

    题意:略. 思路:用dp[i][k]来表示结点i给k个用户提供节目时的最大盈利(可能为负). 则递推方程为: dp[i][j] = max(dp[i][j], dp[i][m] + dp[v][j-m ...

  2. 树状DP (poj 2342)

    题目:Anniversary party 题意:给出N各节点的快乐指数,以及父子关系,求最大快乐指数和(没人职员愿意跟直接上司一起玩): 思路:从底向上的树状DP: 第一种情况:第i个员工不参与,F[ ...

  3. poj 2342 Anniversary party_经典树状dp

    题意:Ural大学有n个职员,1~N编号,他们有从属关系,就是说他们关系就像一棵树,父节点就是子节点的直接上司,每个职员有一个快乐指数,现在要开会,职员和职员的直接上司不能同时开会,问怎才能使开会的快 ...

  4. poj3659树状DP

    Cell Phone Network Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6273   Accepted: 225 ...

  5. hdu 1561 The more, The Better_树状dp

    题目链接 题意:给你一棵树,各个节点都有价值(除根节点),从根节点出发,选择m个节点,问最多的价值是多小. 思路:很明显是树状dp,遍历树时背包最优价值,dp[i][k]=max{dp[i][r]+d ...

  6. 树状DP HDU1520 Anniversary party

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:职员之间有上下级关系,每个职员有自己的happy值,越高在派对上就越能炒热气氛.但是必须是 ...

  7. [Codeforces743D][luogu CF743D]Chloe and pleasant prizes[树状DP入门][毒瘤数据]

    这个题的数据真的很毒瘤,身为一个交了8遍的蒟蒻的呐喊(嘤嘤嘤) 个人认为作为一个树状DP的入门题十分合适,同时建议做完这个题之后再去做一下这个题 选课 同时在这里挂一个选取节点型树形DP的状态转移方程 ...

  8. HDU 4714 Tree2cycle(树状DP)(2013 ACM/ICPC Asia Regional Online ―― Warmup)

    Description A tree with N nodes and N-1 edges is given. To connect or disconnect one edge, we need 1 ...

  9. poj2486--Apple Tree(树状dp)

    Apple Tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7789   Accepted: 2606 Descri ...

  10. 洛谷P2015 二叉苹果树(树状dp)

    题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号来 ...

随机推荐

  1. 如何远程连接非默认端口SQL Server

    SQL Server Management Studio建立远程SQL连接  连接的时候写: 127.0.0.1,49685\sqlexpress 记得使用逗号,不是冒号

  2. js 限制文本框不能输入单引号

    <input onkeydown="if(event.keyCode==32||event.keyCode==188||event.keyCode==222){return false ...

  3. Handler: Service中使用Toast

    Handler 的使用在 android App 开发中用的颇多,它的作用也很大,使用 Handler 一般也会使用到多线程,相信大家对 Handler 不会陌生,在这里,重点说一下 android ...

  4. Day6 盒模型

    Day6  盒模型  1.一.标准盒模型(w3c盒模型)        1)组成部分:        content + padding + border + margin           内容  ...

  5. Elasticsearch-2.3 (OpenLogic CentOS 7.2)

    平台: CentOS 类型: 虚拟机镜像 软件包: elasticsearch-2.3 application server basic software big data elasticsearch ...

  6. JavaScript基础:(加号,数值转换,布尔转换)

    JavaScript中加号运算符"+" 运算过程理解 1) 如果其中一个操作数是对象,则对象会遵循对象到原始值的转换规则转换为原始值.日期对象通过toString()方法执行转换, ...

  7. ubuntu16.4 配置logstash6.3.2 kibanan6.3.2

    1. 官网下载 https://artifacts.elastic.co/downloads/logstash/logstash-6.3.2.tar.gz https://www.elastic.co ...

  8. help.hybris.com和help.sap.com网站的搜索实现

    help.hybris.com 我使用help.hybris.com时,发现每次在搜索栏输入文字时,没有发出任何HTTP请求,那么这个自动完成的下拉框里的记录从哪里来的?我看了下实现,发现所有自动完成 ...

  9. java生成excel文档

    要做一个后台自动化,要先预先生成一份文档,以下内容生成了文档 首先下载jxl.jar包,下载地址:http://download.csdn.net/detail/prstaxy/4469935 1.生 ...

  10. Why malloc+memset is slower than calloc?

    https://stackoverflow.com/questions/2688466/why-mallocmemset-is-slower-than-calloc/ The short versio ...