主要是剪枝的问题,见代码,讲的很详细

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
inline int read(){char chr = getchar();   int f = 1,ans = 0;while(!isdigit(chr)) {if(chr == '-') f = -1;chr = getchar();}while(isdigit(chr))  {ans = (ans << 3) + (ans << 1);ans += chr - '0';chr = getchar();}return ans* f ;
}
void write(int x){if(x < 0) putchar('-'),x = -x;if(x > 9) write(x / 10);putchar(x % 10 + '0');
}int r[50],h[50];//上一次的半径、高
int N,M;
int ans=0x3f3f3f3f;
void dfs(int x,int V,int S,int kk){//当前第x层,当前总共体积为V,当前总侧面积为S,还有kk层没有处理if(S+r[1]*r[1]+kk>=ans) return;//最优化剪枝,如果当前总侧面积+底面积(三视图角度理解)>=当前记录的答案if(x>M+1) return;//超出M层if(N-V-r[x-1]*r[x-1]*h[x-1]*kk>0) return;//同上最优化剪枝,(假设之后每一层的底面积都是上一层的半径与高)if(V==N && x==M+1){//如果可以记录进答案ans=min(ans,S+r[1]*r[1]);return;}for(int H=h[x-1]-1;H>=kk;H--)for(int R=r[x-1]-1;R>=kk;R--){//枚举L,R,(上下界剪枝)h[x]=H;r[x]=R;V+=r[x]*r[x]*h[x];S+=2*r[x]*h[x];dfs(x+1,V,S,kk-1);V-=r[x]*r[x]*h[x];S-=2*r[x]*h[x];//回溯}
}
int main(){N=read(),M=read();h[0]=(int)sqrt(N);r[0]=(int)sqrt(N);dfs(1,0,0,M);if(ans==0x3f3f3f3f)cout<<-1;//答案没有更新过的话,输出-1elsecout<<ans;return 0;
}

转载于:https://www.cnblogs.com/zhenglw/p/9528140.html

【NOI1999、LOJ#10019】生日蛋糕(搜索、最优化剪枝、可行性剪枝)相关推荐

  1. 搜索 —— 深搜的剪枝技巧

    [概述] 搜索算法的时间复杂度大多是指数级的,难以满足对程序运行时间的限制要求,为使降低时间复杂度,对深度优先搜索可以进行一种优化的基本方法--剪枝. 搜索的进程可以看做是从树根出发,遍历一颗倒置树( ...

  2. 【NOIP2001】【Luogu1025】数的划分(可行性剪枝,上下界剪枝)

    problem 将整数n分成k份, 满足1.每份不能为空 满足2.任意两种划分方案不能相同(不考虑顺序) 问有多少种不同的分法 n<=200,k<=6 例:n=7,k=3:1,1,5:,, ...

  3. hdu 4090(搜索+可行性剪枝)

    解题思路:这道题一开始我想用bfs,但这道题我感觉难的是每次消除后,怎么往下往左移动.此外还有就是要剪枝,不然是过不了的,可采用可行性剪枝,即当前的得分加上当前状态下可能得到的最大分,如果还不能够达到 ...

  4. 一本通例题-生日蛋糕——题解超强深搜剪枝,从无限到有限

    题目传送 显然是道深搜题.由于蛋糕上表面在最底层的半径确认后就确认了,所以搜索时的面积着重看侧面积. 找维度/搜索面临状态/对象:当前体积v,当前外表面面积s,各层的半径r[],各层的高度h[]. 可 ...

  5. 深度优先搜索(DFS) 总结(算法+剪枝+优化总结)

    深度优先搜索(DFS) 总结(算法+剪枝+优化总结) 本文中会引用部分实例.文献资料来自不同的作者之手,由于资料整理比较困难,转载地址不在文中列举.如有侵权请联系我更换或删除!对于提供题解思路的各位大 ...

  6. 基于python的AI五子棋实现(极大极小值搜索和alpha beta剪枝)

    1.极大极小值搜索介绍 人机博弈是人工智能的重要分支,人们在这一领域探索的过程中产生了大量的研究成果,而极小化极大算法(minimax)是其中最基础的算法,它由Shannon在1950年正式提出. M ...

  7. [DeeplearningAI笔记]序列模型3.2有条件的语言模型与贪心搜索的不可行性

    5.3序列模型与注意力机制 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.2选择最可能的句子 Picking the most likely sentence condition lan ...

  8. [每日一题] 128. 青蛙过河(数组、记忆化搜索、递归、剪枝)

    文章目录 1. 题目来源 2. 题目说明 3. 题目解析 方法一:哈希表.记忆化搜索.递归解法 方法二:迭代解法 方法三:回溯法+贪心策略+剪枝 1. 题目来源 链接:青蛙过河 来源:LeetCode ...

  9. 剪枝计算机,α-β剪枝 - 电脑黑白棋 - 黑白棋天地

    α-β剪枝算法 前面介绍的基本搜索算法,在实际应用是是十分费时的,因为它需要考虑所有可能的棋步.有研究表明,在黑白棋的中盘阶段,平均每个局面大约有10步棋可供选择[1].如果程序前瞻10步(搜索深度为 ...

最新文章

  1. 0-1背包 java_0-1背包问题,java的动态规划如题,代码如下public
  2. 网易有道2017内推编程题
  3. 在中国使用pip更新或安装库的配置
  4. Genesis Shards即将向用户发放Gen Ticket NFT
  5. yolov3识别的类别_Gaussian YOLOv3:一个更强的YOLOv3,现已开源!
  6. 在 tornado 中异步无阻塞的执行耗时任务
  7. 企业wiki之confluence安装部署(linux)及其破解
  8. 『晨读』纳什均衡又称为非合作博弈均衡,在一个博弈过程中,
  9. JAVA 获取音频文件(ogg格式)毫秒时长
  10. Meta-Tracker(ECCV 2018)视频目标跟踪源码运行笔记——Testing模式
  11. 2020牛客暑期多校训练营(第八场)A.All-Star Game(线段树+带撤销并查集)
  12. 用打比方的方法,10分钟给小白讲清楚Kubernetes
  13. 没得选这件事是人生常态
  14. javascript利用iframe打印pdf文档失败的问题
  15. java毕业设计宠物领养系统Mybatis+系统+数据库+调试部署
  16. 开启redis服务后,无法远程连接服务器上的redis的问题解决办法(Connection refused: no further information)
  17. 老人与海好词100英文带翻译_老人与海英文版好词好句摘抄
  18. echarts地图城市标注,较完整版本
  19. ElasticSearch学习篇2_Rest格式操作(索引、文档)、文档的简单操作(增、删、改、查)、复杂查询操作(排序、分页、高亮)
  20. 播音主持基本功:怎么样正确发声

热门文章

  1. 14款S400升级20款S450外观套件
  2. 【回眸】牛客网刷刷刷!嵌入式软件中也会遇到的嵌入式硬件,通讯,通讯协议专题(一)
  3. vertica rebalance优化
  4. Matlab蒙特卡罗模拟
  5. java徽章_java
  6. 微信小程序 控制台报错net::ERR_UNSAFE_PORT
  7. 做事先做人 做人先立德
  8. 科普:网格屏是什么意思?LED网格屏怎么安装
  9. Python中歌词解析
  10. 【AnimeJs】——仿Animejs徒手实现SVG动画