算法设计与分析第三次编程作业 20043. Fair division
题目描述
你——伟大的赏金猎人,经过了史诗般的战斗后,夺取了属于你的战利品——一个重量为 w w w 克的金块。
你的 n n n 个扈从功不可没。根据每个人自己汇报的功劳大小,你决定给第 i i i 个扈从 a i a_i ai 重量的金块,其中 ∑ i a i = w \sum_i a_i = w ∑iai=w。
在以枪火为筹码谈生意的的比尔吉沃特,没有人做慈善。如果你请比港商行老板帮你分金块,你需要足额支付手续费。如果一个金块在切割前重量为 x x x,你需要为这次分割付出 x × p x \times p x×p 枚的银蛇币,之后金块可以以任意比例被切为两块。
你需要在满足所有扈从的要求的情况下,支付尽可能少的银蛇币。由于银蛇币不可分割,你只需要在最后一次性支付所有切割代价的和向上取整枚银蛇币即可。
输入格式
请从 stdin 读入。
第一行三个整数 n , w , p , ( 1 ≤ n ≤ 1 0 5 , 0 ≤ w ≤ 1 0 7 , 0 < p < 100 ) n, w, p,(1 \leq n \leq 10 ^ 5, 0 \leq w \leq 10 ^ 7, 0 < p < 100) n,w,p,(1≤n≤105,0≤w≤107,0<p<100),分别表示人数、金块重量、与手续费百分比。
第二行 n n n 个空格隔开的正整数,第 i i i 个为第 i i i 个人需求的重量 a i , ( a i ≥ 1 , ∑ i a i = w ) a_i,(a_i \geq 1, \sum_i a_i = w) ai,(ai≥1,∑iai=w)。
对于 30 30 30 分的数据, n ≤ 15 n \leq 15 n≤15。
输出格式
请输出到 stdout 中。
输出一行一个整数,表示答案。
样例输入
1 1 1
1
3 3 50
1 1 1
3 7 50
4 2 1
样例输出
0
2
5
数据范围
备注
三组样例精确答案分别是 0 , 2.5 , 5 0, 2.5, 5 0,2.5,5。
限制
Time Limit: 1s
Memory Limit: 128MB
解决方案
#include <iostream>
#include <cmath>
#include <vector>
#include <queue>
#include <stdio.h>
using namespace std;
//之前过不了,经过助教老师的提醒,是ceil函数的问题。这个函数返回float,在vscode里面打印出来是整型数,但是OJ平台过不了,加一个int即可
//这题之前想复杂了,研究了好久的背包问题,后来好哥哥提醒可以用哈夫曼树。本题用priority_queue实现了一棵简化版的哈夫曼树。
int main()
{int n, w, p, now; //n代表有几个人,w是金块重量。cin >> n >> w >> p;int *a = new int[n];long long int sum=0;priority_queue<long long int, vector<long long int>, greater<long long int> > q;for (int i=0;i<n;++i) {cin >> now; q.push(now);}int num1, num2;for (int i=0;i<n-1;++i) {num1 = q.top();q.pop();num2 = q.top();q.pop();sum += num1+num2;q.push(num1+num2);// cout << num1+num2 << endl;}// hfTree tree(a,n);// cout << tree.sum << endl;// cout << sum << endl;cout << int(ceil(sum*p / 100.0));// cout << ceil(result*p / 100.0);return 0;
}
总结
之前过不了,经过助教老师的提醒,是ceil函数的问题。这个函数返回float,在vscode里面打印出来是整型数,但是OJ平台过不了,加一个int即可。这题之前想复杂了,研究了好久的背包问题,后来好哥哥提醒可以用哈夫曼树。本题用priority_queue实现了一棵简化版的哈夫曼树。
声明
本人对代码保有版权,但是题目来自校内OJ平台,本人没有题目的版权。如有侵权,请联系本人删除。
算法设计与分析第三次编程作业 20043. Fair division相关推荐
- 算法设计与分析 第四次编程作业 1433. Bo
题目描述 博先生掌握了股市内幕消息,因此他想闷声大发财. 对于特定的一只股票,博先生知道了他 n n n 天内的价格走势,并想借此牟利.但是,如果一次交易太多的被发现的话,人生就要结束了罢.因此,他每 ...
- 算法设计与分析(Algorithm Design )课后习题作业+期末复习+期末习题
课后习题作业资源链接 期末复习+期末习题资源链接 对应的书(不是算法导论):算法设计与分析(Algorithm Design ) Jon KIeinberg 著 张立昂 屈婉玲 译 有这本书中英文版. ...
- 算法设计与分析 实验三 回溯法求解地图填色问题
回溯法求解地图填色问题 一.实验目的与要求 1.实验基本要求: 2.实验亮点: 二.实验内容与方法 三.实验步骤与过程 1.未优化的回溯: (1)算法描述: (2)编程实现 (3)运行并测试: 2.对 ...
- 算法设计与分析 实验三 贪心算法
一. 实验目的和要求 1.掌握贪心算法的基本思想. 2.学习利用贪心算法设计和实现算法的方法. 3.了解利用替换法证明贪心策略是否能获得全局最优解的过程. 4.熟练掌握贪心算法在两个典型图搜索中的应用 ...
- 算法设计与分析 实验三 动态规划算法
实验3.<动态规划算法实验> 一.实验目的 掌握动态规划方法贪心算法思想 掌握最优子结构原理 了解动态规划一般问题 二.实验内容 编写一个简单的程序,解决0-1背包问题.设N=5,C=10 ...
- [XJTUSE 算法设计与分析] 第三章 动态规划 3.2 动态规划典型例题与解题思路(一)
文章目录 3.2 动态规划典型例题与解题思路(一) 一.拆分类 1.矩阵连乘(极重要) 1)穷举法 2)动态规划法 3)备忘录方法 2.凸多边形最优三角剖分 ① 三角剖分的结构 ② 最优子结构性质 ③ ...
- [算法设计与分析]第三章练习题:删除多余括号
问题描述 从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算符的相对位置不变,且与原表达式等价,不要求化简.另外不考虑'+' '-'用作正负号的情况, ...
- 算法设计与分析第三章作业
一. 二. 动态规划最核心的思想,就在于拆分子问题,记住过往,减少重复计算. 动态规划问题的关键在于正确地写出基本的递推关系式和恰当的边界条件(也就是基本方程).要做到这一点,必须将问题的过程划分成几 ...
- 计算机算法设计与分析第五章思维导图知识点总结 ( 初稿 )
复习链接 计算机算法设计与分析第一章思维导图 计算机算法设计与分析第二章思维导图&&知识点总结 计算机算法设计与分析第三章思维导图&&知识点总结 计算机算法设计与分析第 ...
最新文章
- 实现计时、时钟,实时获取当前年月日时分秒,记录时间(获取当前的时间,开始计时,计时过程相当于你的电脑时钟)0000年00月00日 00:00:00
- java拖动组件,[小娱乐] 一个能拖动组件、改变组件大小的容器
- C++编程思想重点笔记(上)
- 阅读《Android 从入门到精通》(29)——四大布局
- linux 线程 进程经典文章
- 数据库迁移——自动迁移Enable-Migrations
- java nio单线程6_Java NIO6:选择器2---代码篇
- pstack 安装linux_详解命令-pstack
- mybatis转义反斜杠_Shell echo命令:输出字符串
- 自己动手构造编译系统:编译、汇编与链接2.1.3 符号表管理
- [vue] vue的属性名称与method的方法名称一样时会发生什么问题?
- 移动端click延迟和tap事件
- js 循环拆词_javascript forEach通用循环遍历方法
- c语言编程题2^0+2^1+……+2e63,牛客网刷题33(2道题)
- 基于JAVA+Spring+MYSQL的公共自行车管理系统
- NOIP2016提高A组 B题 【HDU3072】【JZOJ4686】通讯
- 前端项目ip设置成0.0.0.0的原因
- 什么是物联网?物联网与互联网的区别是什么
- http下载异常_用了这么久HTTP, 你是否了解Content-Length?
- 视觉伺服入门第二步:带你从经典论文阅读Visual Servo Control Part II: Advanced Approaches进阶版