当前位置: 首页 > news >正文

捡石子---贪心算法(huffman)

问题 E: 捡石子

时间限制: 1 Sec  内存限制: 128 MB
提交: 49  解决: 31
[ 提交][ 状态][ 讨论版]

题目描述

在一个圆形操场的四周摆放着 n堆石子。 现要将石子有次序地合并成一堆。 规定每次选2 堆石子合并成新的一堆,合并的费用为新的一堆石子数。试设计一个算法,计算出将 n堆石子合并成一堆的最小总费用。

输入

输入数据第1行有1个正整数 n(1≤n≤1000),表示有 n堆石子,每次选2堆石子合并。第2行有 n个整数, 分别表示每堆石子的个数(每堆石子的取值范围为[1,1000]) 。

输出

数据输出为一行, 表示对应输入的最小总费用。

样例输入

7
45 13 12 16 9 5 22

样例输出

313

提示

 


 中南大学计算机&软件复试QQ群552889929

 

[ 提交][ 状态]

 

 

#include <stdio.h>
#include <stdlib.h>
 
int cmp(const void *a,const void *b)
{
  return(*(int *)b-*(int *)a);  //实现的是降序排序
}
 
int main(int argc, char *argv[])
{
  //哈夫曼树的应用
  int n;
  int a[1005],i,j,sum;
  while(scanf("%d",&n)!=EOF){
      for(i=0;i<n;i++)
       scanf("%d",&a[i]);
 
     for(i=0,sum=0;i<n-1;i++)
     {
        qsort(a,n-i,sizeof(a[0]),cmp);
//        for(j=0;j<n;j++)
//            printf("%d ",a[j]);
//           printf("\n");
        a[n-2-i]=a[n-1-i]+a[n-2-i];//每次合并最小的两个
        if(n-2-i>-1)
        sum+=a[n-2-i];
//        if(n - 2 - i == 0) break;
//        printf("sum = %d\n", sum);
 
//         printf("sum = %d\n",sum);
     }
//     sum += (a[0] + a[1]);
     printf("%d\n",sum);
 
 
  }
 
  //system("PAUSE");
  return 0;
}
 
/**************************************************************
    Problem: 1187
    User: xiaxiany
    Language: C++
    Result: 正确
    Time:14 ms
    Memory:1084 kb
****************************************************************/

 

转载于:https://www.cnblogs.com/xiaoyunoo/p/6514729.html

相关文章:

  • HTML特殊字符编码对照表
  • Flex中ArrayCollection的复制(克隆)
  • mysql表的复制
  • 作用域与作用域链
  • 批量修改SQL数据库字段值
  • [C#7] 1.Tuples(元组)
  • flex z-order错误解决
  • css居中小结
  • Flex的DataGrid中时间如何格式化
  • 买卖股票最佳时机
  • parentApplication 和parentDocument 的区别
  • C#设计模式(11)——外观模式
  • flex大小写转化
  • Target runtime Apache Tomcat 5.5 is not defined
  • Android耗时操作
  • (三)从jvm层面了解线程的启动和停止
  • @jsonView过滤属性
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • Android Studio:GIT提交项目到远程仓库
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Centos6.8 使用rpm安装mysql5.7
  • CSS3 变换
  • go append函数以及写入
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Material Design
  • vue中实现单选
  • 从tcpdump抓包看TCP/IP协议
  • 对象管理器(defineProperty)学习笔记
  • 给新手的新浪微博 SDK 集成教程【一】
  • 利用DataURL技术在网页上显示图片
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 小程序button引导用户授权
  • Nginx实现动静分离
  • ​secrets --- 生成管理密码的安全随机数​
  • ###项目技术发展史
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (C语言)逆序输出字符串
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (转)大型网站架构演变和知识体系
  • (转)德国人的记事本
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .NET应用架构设计:原则、模式与实践 目录预览
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @GetMapping和@RequestMapping的区别
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术
  • [Angular] 笔记 7:模块
  • [BUG]Datax写入数据到psql报不能序列化特殊字符
  • [bzoj1912]异象石(set)
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素