当前位置: 首页 > news >正文

整站优化系统网页设计公司经营范围

整站优化系统,网页设计公司经营范围,百度助手app免费下载,网站怎么做啊题目描述 题目分析 考虑题目是否满足贪心。每次施展魔法会使一段连续的竹子高度变为一半左右的平方根。根据样例#xff0c;似乎每次让最高的竹子变短就能得到最优解。 假设魔法一次只能对一根竹子使用#xff0c;永远不出现连续相同高度的竹子#xff0c;那么显然无论使用…题目描述 题目分析 考虑题目是否满足贪心。每次施展魔法会使一段连续的竹子高度变为一半左右的平方根。根据样例似乎每次让最高的竹子变短就能得到最优解。 假设魔法一次只能对一根竹子使用永远不出现连续相同高度的竹子那么显然无论使用魔法的顺序如何使用次数永远都是固定的如果会出现连续相同的竹子先对这排竹子中最高的施展魔法不会对其他竹子的变短次数造成影响。而如果率先对相同高度且不是最高的竹子变短则可能会丧失更多竹子变成连续的机会故贪心策略成立。 接下来是如何检测最高竹子和连续相同竹子如何设计算法是难点。首先想到采用map容器给竹子高度排序排序过程的复杂度为不会超时然后使用深度优先搜索检测最大竹子两个方向上所有相同连续的竹子让这些竹子一起变短。经计算最大高度的竹子最多经过6次变短高度就能变成1因此魔法的最多施展次数约为次如果每次都经过一遍搜索会超时。 为了避免重复检测连续的竹子对DFS进行改良每次搜索到连续竹子在搜索过的竹子上分别添加s\t标记标志从第s根到第t根的竹子都是相同高度的从复杂度上将所有相同高度的连续竹子化为一根差不多是某种程度上的离散化免去了重复的搜索。 我的代码 long long型数据的范围是可以用来记录竹子的高度。敲了几行代码后发现只用一个dfs很难处理已经搜索过的竹子因此使用两个dfs分别向左和向右搜索。 在代码过程中由于不熟悉stl容器语法踩了很多坑比如迭代器的失效问题以及multimap.erase(key)会将对应的所有value都删除。 #include iostream #include algorithm #include map #include stack #include math.husing namespace std; typedef long long ll; int n; //总竹子个数 ll lenth[200002]; //所有竹子高度 int sign[200002][3]; //sign[n][0]和sign[n][1]分别储存了连续竹子的起点和终点坐标 //sign[n][2]为连续竹子的的关键坐标储存在map内 int other[200002]; //多余不用搜索的竹子 multimapll, int M; //从低到高竹子对应的坐标 multimapll, int::iterator it; //迭代器用于取出最后一个元素stackint S; //搜索过的竹子 int large; //搜索过的竹子中序号最大的 int small; //搜索过的竹子中序号最小的/*向右深度优先搜索*/ void dfs1(int n, ll l) { //搜索第n根竹子,长度为ln sign[n][1];large max(large, n); //记录搜索终点if (lenth[n 1] l) { //向右搜索S.push(sign[n 1][1]); //起点以外搜索过的竹子入栈S.push(sign[n 1][2]); //替代多余的关键坐标dfs1(n 1, l);} } /*向左深度优先搜索*/ void dfs2(int n, ll l) { //搜索第n根竹子,长度为ln sign[n][0];small min(small, n); //记录搜索起点if (lenth[n - 1] l) { //向左搜索S.push(sign[n - 1][0]); //起点以外搜索过的竹子入栈S.push(sign[n - 1][2]); //替代多余的关键坐标dfs2(n - 1, l);} } int main() {//初始化参数for (int i 0; i 200002; i){lenth[i] 0;sign[i][0] i;sign[i][1] i;sign[i][2] i;other[i] 0;}//输入总竹子数cin n;//输入竹子高度for (int i 1; i n; i){ll L;cin L;lenth[i] L; //储存在数组pairll, int P(L, i); //储存在map容器M.insert(P);}/*循环取出最高竹子*/int ans 0;int flag 0; //循环停止的标志while (!flag){large 0;small 200002;it M.end();it--;//此时迭代器指向Map最后一个元素ll k (*it).first;ll v (*it).second;//获取键值对M.erase(it);//删除当前容器元素if (k 1) {flag 1;}/*深度优先搜索*/if (!flag other[v] ! 1) {ans;//记录搜索次数即魔法施展次数dfs1(v, k);dfs2(v, k);lenth[v] floor(sqrt(lenth[v] / 2 1));//更新关键竹子高度sign[v][0] small;sign[v][1] large;sign[v][2] v;lenth[sign[v][0]] lenth[v];lenth[sign[v][1]] lenth[v];/*出栈操作*/while (S.size()) {int i S.top();sign[i][0] small;sign[i][1] large;sign[i][2] v;other[i] 1;lenth[i] lenth[v];S.pop();//更新两边竹子的高度并清除多余的非关键坐标}}/*修改map容器存储*/ll nl floor(sqrt(k / 2 1));pairll, int P(nl, v);M.insert(P);//把新的高度存到Map中}cout ans;return 0; }
http://www.zqtcl.cn/news/488928/

相关文章:

  • 哪个网站 可以做快递单录入网站怎么做抽奖
  • 网站设计培训班网站域名费用怎么做分录
  • 济南做网站哪里好惠州附近公司做网站建设多少钱
  • 使用oss做静态网站网站广告牌制作教程
  • 外贸看的英文网站公众号模板编辑器
  • 做网站的数据库的步骤阅读网站模板下载
  • 建设网站要钱吗个人养老金制度是什么意思
  • 做h5的网站页面设计软文素材网站
  • 黄冈网站推广软件费用是多少手机网站弹出层插件有哪些
  • wordpress文章链接怎么改怎么优化关键词排名优化
  • 专业做包包的网站好产品网站做营销推广
  • 网站刚建好怎么做能让百度收录湖北黄石网站建设
  • 网站建设拾金手指下拉二一wordpress 插件破解
  • 天津做网站外包公司有哪些美橙互联网站
  • 石家庄网站建设蓝点办公室装修工程
  • 申请网站空间就是申请域名建设机械网站咨询
  • 做美食网站有哪些网站怎么做自响应
  • 衡水网站建设维护宝安官网网站建设比较好的
  • 网站建设的审批重庆建设工程信息网30系统
  • 泉州软件开发培训机构怎么做网站内部链接的优化
  • 网站定位是什么中国it外包公司排名
  • 洛阳微信平台网站建设网站成功案例分析
  • 网站建设在淘宝怎么分类深圳软件开发招聘信息
  • .net如何做网站个人网站的制作
  • 网站优化排名推广站长统计官方网站
  • 长沙wap网站建设wordpress 用户 函数
  • 淮安做网站的公司有哪些公司目前上海有几个区
  • 怎么做自动跳转网站建站之星 discuz
  • 网站建设开发合同范本页面设计有哪几种风格
  • 重庆做网站重庆做网站做公司网站建设价格