生日蛋糕
输入的东西,一个是蛋糕的体积,一个是蛋糕的层数,
简言之,我觉得这个就是两个dfs的状态。
一旦越过这两个就得return ,同时这两个东西也参与进去了dfs。
至于题目,
第一个要求是层数越高,高度越小,半径越小。
第二个要求是枚举的面积要最小。
第三个也可以判断为求出的面积是否比之前的小。
第四个是一个细节,就是最下面一层的圆的面积是上面几层的表面积之和。
第五个是已搜索到的最小表面积已经大于已知的最小面积也退出。
第六个是枚举半径和高度有上下界是什么意思?
那么我觉得可能核心的判断在于最小的判断。
除此外,还有一些,细节上比较恶心的事情。
哈哈
11.30
比如这个pi的处理,虽然。。恩我没懂
还有点double的处理。。。但是pi的话,不怕把?
青春是什么》
我还能坚持吗?
我是?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????牛逼你皮啊啊啊啊啊啊啊 啊啊啊说的是看法的数量垃圾垃圾垃圾垃圾垃圾垃圾垃圾不是传奇出啊你去出去你洒家打开每次看抽卡剪卡水库附近可自行开展仓库收到你看错你看出卡四年擦课程你可真能吃上课查看支持你这款尼康支持你查看支持你控制可能看操作内存扩展从中看出你
害~说不出来了。。。
孤独是什么》什么是孤独?
我是谁?我从哪里来,我要到哪里去?
我是洛克菲勒?我是凯撒?我是神,god?
我是什么》我掌握了什么?
我确实是什么都没有掌握。。什么时候拿第一?什么时候?
什么时候成为最强?
什么时候可以拿金牌?
什么啊实打实大苏打顺丰到付
伟大,什么是伟大,我也想伟大,
但是我并不伟大。我优秀吗?我优秀吗优秀吗》
不够优秀啊,我并不是第一,嗯。我我我我我我我嚄哦噢哦噢
我不是第一,
我不是第一,
我不是第一,
我真的是垃圾大苏打撒旦撒
哈哈哈哈
达成成就,抄代码
第一个问题,dfs中(m,n,n,0,0),第二个n是什么意思?高度怎么是2?层数(就样例来说)
第二个问题,if(ans=MAXN),就输出0.我知道没有解就输出零,可是,怎么能没有最小值呢?
今天的六个小时的代码,今天估计只有2小时了
1,const起着限定一个变量不被改变的作用。起着一种静态的作用。
2,关于一个东西,比如07fffffff,这个好像是32位比特的最大值,也就是2的32次方。
3,
这里有一个剪枝,还是挺难想的
如果,
当前的表面积+还需要建的蛋糕的侧面积>已知的最优面积
说实话,这些剪枝,奇奇怪怪哦的
那么证明:
设已经制作了i层蛋糕,还需要做i-m层蛋糕。
设si 为第i层的侧面积
Fsi 为剩下需要做的侧面积
根据体积的定义,
V=pi*r*r*h;
然后得出一个奇怪的东西!!!
2Vi= 2R[i+1] * R[i+i] * H[i+1] + ...+ 2Rm * Rm * Hm
(我先复制下,防止我特么把有些东西给分不清)
可以的,起码这样放下去,有那么一点看懂这个废物了
很明显,第二个是i+1,菏泽特么真脑残,,
就算你所谓的省略的pi ,也不能这样写等式啊,很明显的有问题唉。
vi=pi*r[i]*r[i]
其实的话
这个表示的是,整个i-m层蛋糕的体积把。
嗯,再看人家算出这个再想干啥
乘2什么的,都是想要凑出那个周长的东西把
嗯
那我给你改进一下这个公式
2vi=2*pi*r[i+1]*r[i+1]*h[i+1]+2*pi*r[i+2]*r[i+2]*h[i+2]....2*pi*r[m]
*r[m]*h[m]
2vi=s[i+1]*h[i+1]....s[m]*r[m];
恩然后
可能所谓用了一个放缩法吧?
2vi<s[i+1](s[i+1]+s[i+2]...s[m]);
(完全不可能是等于嘛)
然后又根据你最早设的那个东西,
fsi为剩余部分的侧面积
2vi<s[i+1]*Fsi;
当然到了这里肯定还是没有完的
然后再除一下,
Fsi>2vi/s[i+1];
还有就是有一个问题,
记住在变成中
v[i[/s+r,这个加号把这个东西分成的是两部分!
而我一开始就显然的错误了
我看成v[i]要除以下面的r+S,但显然并不是这样
同时关于这个放缩法,是放大了之前剩余部分的侧面积的
这个是在放大的情况下,再进行一些东西的
不是不是
首先放大的是体积
然后从体积再算出来的侧面积好不,
因为上面的面积之前也说过,只不过是,最底层的圆的面积而已。
所以我推出来的剩余的侧面积也是要本原本要大的
(否则怎么允许运行嗯?)
这么说的话,这个公式就明了了
2vi>Fsi*r[i+1]
Fsi>2vi/r[i+1];
反正我觉得再好像放缩了一次
2(n-v)/r[i]+s>=ans; retuirn
对了这个剪枝怎么来的?我觉得这个比较重要,说实话,这个公式照着推真的没有什么难度的、
这个题我现在不会的地方就是,
枚举半径和高度,
这块没懂的是这个枚举的上下界什么东西的,
但是其实也没那么难懂,看了博客好像也懂了一点,也跟地下室枚举法有点关系。
为啥不带我pi哥我还是不很懂
额 先解决下为什么不带pi这个问题
Q=s*pi;
假设就两层的蛋糕我算一个表面积,
pi*2*r[2]*h[2],第二层的侧面积,
pi*2*r[1]*h[1],第一层的侧面积,
pi*r[2]*r[2],表面的整个圆的面积。
Q=pi*2*r[2]*h[2]+pi*2*r[1]*h[1]+pi*r[2]*r[2]=S*pi;
2*r[2]*h[2]+2*r[1]*h[1]+r[2]*r[2]=S;
噢,这个公式很好得解释了我们为什么不用pi了。
再谈下枚举,枚举要注意上下界,我们每次枚举的上界是什么?下界又是什么?
根据之前的东西,我们不是明白了,每层半径和高的下界就是地下室枚举法的层数吗?
那么上界是什么?
关于这个mins,minv,我觉得它欺骗了我。。是累计吧。。。
而且我看的这个算体积的时候minv[i]=minv[i]+i*i*i;
好啦,主函数这里我懂啦。
还好只有一部看不懂了
这个就算除的话,也该是用该层的体积去除把?
这个等式,n-minv[i-1]-v,是否算出来的就是该层的体积?
那么首先得明确一个东西,就是关于minv到底是指的是什么》
不是,他不是说了吗?
如果单纯地说,minv[i[是第i层的体积,
那他这个我害真不懂,
我真是卡在这步上了
为什么我脑子里全是5层的东西??
先用样例啊....2层啊
但是我又感觉这个dfs似乎少一层?
这他妈枚举上界这么大?
.........用体积那些东西枚举半径高度???
我觉得差不多可以开始写了
写写写尼玛啊
1,一个是定义dfs函数忘记写返回值类型了
2,2(n-v)/r+s>=ans
你能看出来哪里错了吗》2后面都没加乘号。
3,定义ans时候没有 给赋值。。
4,进入半径和高度的循环时候,
s=r*r---->s=i*i;
5,可以噢
6,关于一个公式
剪枝那个公式你也得再看看,
是当前层,你要知道之前,假设是怎么推这个公式的
假设已经减了i层,则还需要建造m-i层
那么你进入循环的就是,i+1层。所以用r[i+1]进行除法。
其实从等式也能看出是最小的侧面积。
但是这个里面枚举高度的这个还是。。emmm
hh=min((n-v-b[p-1])/(i*i),h-1);
枚举的时候求什么》
求能让它的表面积--侧面积最小的高和半径。
在半径已经确定的前提下,(毕竟是先枚举的是半径)
我们自然要求的高度最小才能求出最小的侧面积。
hh=min((n-v-b[p-1])/(i*i),h-1);,不过你能保证,但是h-1已经是下界了好不,
不对,小是可以的,
我靠
h-1是上界
!!!要么取比h-1小,要么取h-1;
思想内涵理解了,再理解下具体公式,
(已知的所有体积-已经建造好的体积-要建层的最小体积)/ 要建层的半径平方
n-v-minv[i-1]/i/i
额,发觉又全不会了。。第一层没建》?
嗯,又想通了,但是h-1有什么用?
不懂,就当该层上界呗;额
原来是你DFScuo l