poj 3253Fence Repair--动态规划
来源:互联网 发布:算法的时间复杂度是指 编辑:程序博客网 时间:2024/06/04 19:10
问题描述:需要N个planks of woods,有Li个长度,农民John购买了一个无限长的木棍,要从木棍上砍下,N个Li的木棍,比如21 Length needs of 21cents.
输入:
3
8
5
8
输出:
34
分析:1,2,4,5
1+2=3;3+4=7;5+7=12;分析:首先选择两个最小的相加得到一个数和a,将a加入到剩余的队列中,继续排序,然后再找两个最小的,再求和....
比如:
567 345 690 841 1278
567+345=912; 排序:690 841 912 1278
690+841=1531;排序: 912 1278 1531
912+1278=2190;排序:1531 2190
1531+2190=3721
3721+2170+1531+1278+912=8354;
思路:贪心+哈弗曼树,用常规的方法来分析
1、首先读取n个数 ,进行排序;2、对前两个数相加,得到sum,然后对sum ,i+2,i+3,...,n排序
for(int i=1;i<=n-1;i++)
{
for(int j=i+2;j<=n;j++)
{ if(sum>a[i])
{
w[j-1]=w[j];
if(j==n)
{
w[j]=sum;
break
}
}
else
{ w[j-1]=sum; break;}
}
}
#include<iostream>#include<stdio.h>using namespace std;int cmp(const void* a,const void* b){return *(int*)a-*(int*)b;}int main(){ int n; while(scanf("%d",&n)!=EOF) { __int64 *a=new __int64[n+1]; for(int i=1;i<=n;i++) scanf("%I64d",&a[i]); qsort(a,n+1,sizeof(__int64),cmp); __int64 mincost=0; for(int i=1;i<=n-1;i++) { __int64 sum=a[i]+a[i+1]; mincost+=sum; for(int j=i+2;j<=n;j++) { if(sum>a[j]) { a[j-1]=a[j]; if(j==n) { a[j]=sum; break; } } else { a[j-1]=sum; break; } } } printf("%I64d\n",mincost); } return 0;}
- poj 3253Fence Repair--动态规划
- POJ 3253 Fence Repair
- poj 3253 Fence Repair
- POJ 3253 Fence Repair
- POJ 3253 Fence Repair
- POJ 3253 Fence Repair
- POJ 3253 Fence Repair
- poj 3253 Fence Repair
- POJ 3253Fence Repair
- POJ--3253 -- Fence Repair
- poj-3253-Fence Repair
- POJ 3253 Fence Repair
- POJ 3253 Fence Repair
- poj 3253 Fence Repair
- poj 3253 Fence Repair
- POJ - 3253 Fence Repair
- POJ 3253 Fence Repair
- poj 3253 Fence Repair
- 70.windbg---!pool
- 通过云片网实现短信以及验证码的发送
- POJ 1112 Team Them Up! DP
- 失眠,何其苦也!
- Effective c++ 条款28: 划分全局名字空间
- poj 3253Fence Repair--动态规划
- __proc_info_begin->__proc_info_end
- 如何关闭iOS中键盘自动大写
- 使用putty中的pscp在windows主机和Linux服务器之间传递文件
- 【求证明】【特殊的哈密顿回路】旅行
- hdu3709 Balanced Number
- 需求分析文档
- 编写自己的yeoman generator
- meta属性