切割木板 (贪心)
2016-02-29 11:00
232 查看
木板长为:21
输入:
N=3
L={8,5,8}
输出:
34
由于木板的切割顺序不确定,自由度很高.首先,切割的方法可以参见二叉树,每一个叶子节点就对应了切割出的一块块木板.叶子节点的深度就对应了为了得到对应木板所需的切割次数,开销的合计就是个叶子节点的
木板的长度*节点的深度
的总和.
最短的板与次短板的节点应当是兄弟节点
<<挑战程序设计竞赛>>读后感
输入:
N=3
L={8,5,8}
输出:
34
由于木板的切割顺序不确定,自由度很高.首先,切割的方法可以参见二叉树,每一个叶子节点就对应了切割出的一块块木板.叶子节点的深度就对应了为了得到对应木板所需的切割次数,开销的合计就是个叶子节点的
木板的长度*节点的深度
的总和.
最短的板与次短板的节点应当是兄弟节点
typedef long long ll; int N,L[MAX]; void solve() { ll ans=0; //直到计算到木板为1块时为止 while(N>1){ int mii1=0,mii2=1; if(L[mii1]>L[mii2]) swap(mii1,mii2); for(int i=2; i<N; i++){ if(L[i]<L[mii1]){ mii2=mii1; mii1=i; } else if(L[i]<Lmii2){ mii2=i; } } //将两块板拼合 int t=L[mii1]+L[mii2]; ans+=t; if(mii1 == N-1) swap(mii1.mii2); L[mii1]=t; L[mii2]=L[N-1]; N--; } printf("%d\n"ans); }
<<挑战程序设计竞赛>>读后感
相关文章推荐
- GIT命令速查表
- 数组a和&a的区别
- 谷粉搜搜 九尾搜索 推荐
- 一次性清空某个数据库中所有表数据的SQL
- Mac网络优先级设置
- 简单并行计算技术方法研究
- php设计模式 工厂、单例、注册树模式
- 双端队列
- Java大字节顺转换小字节顺
- JavaScript+CSS实现的可折叠二级菜单实例
- Oracle 补丁下载地址
- webservice笔记--51学院webservice教程
- js遍历Object所有属性
- IOS 消息机制(NSNotificationCenter)
- 限定UITextfield的输入字符的格式和字数
- 子网
- JSONArray().fromObject(); 出现org.apache.catalina.core.StandardWrapperValve invoke错误的解决办法
- 企业应用程序安全的新「守护神」
- Android SearchView 实现一边输入一边搜索功能
- linux su和sudo命令的区别(转)