poj1190 生日蛋糕
来源:互联网 发布:免费网站域名注册 编辑:程序博客网 时间:2024/05/02 02:47
题目链接:http://poj.org/problem?id=1190
题意:m层,要求Ri > Ri+1且Hi > Hi+1,并且总体积等于n,求最小的表面积(最下一层的下底面除外)
思路:因为s = 侧面积 + 最大圆面积。可以从考虑从底层到高层或者从高层到底层搜索。
暴力搜索就别想了。。各种剪枝之后勉强过
Accepted760K47MS#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<map>#include<cmath>using namespace std;int n, m, ans, tmp, R;int minv[30], mins[30];void pre(){ ans = 1000000; for(int i = 1; i <= 20; i++) { minv[i] = minv[i - 1] + i * i * i; mins[i] = mins[i - 1] + 2 * i * i; }}void DFS(int r, int h, int sp, int level, int vol){ if(vol + minv[level] > n || sp + mins[level] > ans || 2 * (n - vol) / r + sp >= ans) { return; } if(level == 0 ) { if(vol == n) ans = min(ans, sp); return; } for(int i = r - 1; i >= level ; i--) { for(int j = h - 1; j >= level ; j--) { level == m ? tmp = 1: tmp = 0; DFS(i, j, sp + 2 * i * j + tmp * i * i, level - 1, vol + i * i * j); } }}int main(){ pre(); scanf("%d %d", &n, &m); DFS(sqrt(n) + 1, n + 1, 0, m, 0); if(ans == 1000000) cout << 0 << endl; else cout << ans << endl; return 0;}
阅读全文
0 0
- poj1190 生日蛋糕
- poj1190生日蛋糕
- poj1190生日蛋糕
- poj1190 生日蛋糕
- POJ1190-生日蛋糕
- POJ1190生日蛋糕
- poj1190 生日蛋糕
- poj1190 生日蛋糕 dfs
- poj1190 生日蛋糕 搜索+剪枝
- poj1190深搜 生日蛋糕
- POJ1190生日蛋糕题解
- POJ1190 生日蛋糕(DFS)
- Poj1190 生日蛋糕 DFS
- poj1190 生日蛋糕 -dfs
- poj1190 生日蛋糕 dfs
- poj1190——生日蛋糕
- poj1190 生日蛋糕 (搜索剪枝)
- poj1190生日蛋糕(dfs+剪枝)
- 五.BFPRT线性查找算法
- 梯度下降原理
- ios 公司版 开发者申请
- Android WebView常见问题解决方案汇总
- Swift单元测试XCTest
- poj1190 生日蛋糕
- Android--recovery备份系统,并做成卡刷包
- Kendo UI Grid
- 一个vue项目的简单分享
- 《How to Generate a Good Word Embedding?》导读
- 吾爱破解crackme 023 024
- Binary String Matching
- jenkins 集成钉钉机器人
- future::get() 抛出异常Unknown error -1