2016SDAU课程练习一
WiseDoge
未来的IT民工
展开
-
Problem A
概述:一个走廊南北两排各有200个房间,最近,公司要做一次装修,需要在各个办公室之间搬运办公桌,由于走廊狭窄,办公桌都很大,走廊里一次只能通过一张办公桌。 合理安排,求出完成搬运的最短时间。思路:将房间号简化为走廊号,不重叠的区域可以并行搬运,重叠的区域需要串行搬运,模拟搬运过程,得出每个走廊号被使用的次数,次数的最大值就是就是最短时间。感想:本来这道题一直没有思路,老师上课讲了之后就原创 2016-03-20 17:43:36 · 478 阅读 · 0 评论 -
Problem Q
概述:输入一串数,取中间值。思路:将串的大小记为n,按照升序排列,如果n为奇数,则取n/2的值,如果n为偶数,则取n/2和n/2-1的平均值。感想:读题的时候有点小困难,差点误解了题。#include#include#include#includeusing namespace std;int main(){ //ifstream cin("aaa.txt"); in原创 2016-03-14 21:44:34 · 518 阅读 · 0 评论 -
Problem G
概述:初始在0层,上一层需要6秒,下一层需要4秒,在每一层停靠5秒。思路:按部就班的计算即可。感想:相对于其他题来讲,很简单。#include#include#includeusing namespace std;int main(){ //ifstream cin("aaa.txt"); int n; vectorv; int floor,sum; while原创 2016-03-14 21:36:49 · 445 阅读 · 0 评论 -
Problem E
概述:输入若干个节目的起始时间,选出能完整观看的节目的最大数。思路:贪心算法问题,解题的关键是在有限的时间内安排尽量多的节目。所以将节目按开始的时间排序,然后遍历所有节目,将前一个的结束时间与下一个节目开始时间冲突的节目排除,随后统计结果。感想:第一个AC的题,非常简单。#include#include#include#includeusing namespace std;s原创 2016-03-14 21:23:50 · 484 阅读 · 0 评论 -
Problem H
水题,考察数位分离,和格式控制,没什么做的必要。#includeint main(){ int n; double d; int num; char h, MinA, MinB, SecA, SecB; scanf("%d", &n); scanf("%lf", &d); while (scanf("%d", &num) != EOF) { printf("%3d:原创 2016-03-24 21:53:00 · 293 阅读 · 0 评论 -
Problem F
概述:给定一个书的价格和各种面值的纸币个数,求买这本书需要的最小纸币数和最大纸币数。思路:最小数的求解思路是从面值大的开始贪心,直到花完钱为止,最大值运用转换思维,转化为总钱数减去书钱,求这些钱的最小值,即为所需纸币的最大值。感想: 以后要多学学转换思维。#include#include#include#includeusing namespace std;const int c原创 2016-03-24 21:51:05 · 514 阅读 · 0 评论 -
练习1——贪心算法总结
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 实现贪心的具体步骤是:Begin 从问题的某一初始解出发;while 能朝给定总目标前进一步 do 求出可行解的一个解元素;由所有解元素组合成问题的一个可行解 从我的理解来看,目前遇到的贪心问题原创 2016-03-23 23:38:12 · 696 阅读 · 0 评论 -
Problem N
概述:微软公司从第五个月开始每个月都会统计以本月为基准,前5个月的财报,财务只会盈利或亏空,并且所有的赢利月的盈利值都相等,所有的亏空月的亏空值都相等,并且每次财报都显示亏空,问,年总利润能否大于零,如果大于,输出可盈利的最大值,否则输出Default。思路:让被统计次数最多的月份亏空,其他月盈利,做一次假设,即00001 00001 00,再让被统计次数最多的前两名月份亏空,其他月盈利,再做原创 2016-03-21 11:46:06 · 441 阅读 · 0 评论 -
Problem M
概述:求n的几次方等于p思路:出题人的本意可能是想考察大数类,结果弄巧成拙,用Double型就能完全表示计算结果。感想:无。#include#include#include using namespace std;int main(){ //ifstream cin("aaa.txt"); double n; double s; while (cin >> n >>原创 2016-03-21 11:27:28 · 336 阅读 · 0 评论 -
Problem O
概述:m个车过河,一个船一次能载n个车,过一次河时长为t,求所有车渡河的最短时间(time)和船渡河的最小次数(sum)思路:将time和sum分开考虑。sum很简单,让每一船装满即可。对于time,在船装满的前提下,就判断渡船装满时的时间和装入的最后一辆车到达的时间比较。最后一次过河不用回来。感想:做了周一整整一个上午!!!!! What‘s the Fuck !!! #includ原创 2016-03-21 11:14:28 · 568 阅读 · 0 评论 -
Problem B & Problem I
概述:加工零件,如果后一个零件的长度和重量大于前一个,则不计时间,求所用的最少时间。思路和感想:形如Problem E,思路十分相似。但是有一些细节性的问题需要仔细斟酌。#include#include#include#includeusing namespace std;struct Stick{ int length, weight; bool flag=0; boo原创 2016-03-14 22:02:07 · 387 阅读 · 0 评论 -
Problem P
概述:有n天,第i天生产的费用是c[i],要生产y[i]个产品,可以用当天的也可以用以前的(多生产的)。每单位产品保存一天的费用是s。求最小费用。思路:显然贪心,每次查找之前有没有哪一天保存到现在的价值最小,然后比较更新。感想:题好难读啊!!!是时候学一波英语了。#include#include #include#includeusing namespace std;int原创 2016-03-20 19:25:40 · 455 阅读 · 0 评论 -
Problem K
概述:给你要求所需要的染料,最大只有50ML,也就是说,超过了50ML之后,就要再继续使用下一个Kit(工具箱),这个时候,可以根据最大需求的染料数量(ml为单位的),来进行规定所需要的染料桶的个数的最小值思路:按从大到小排列,每次将最大的三个进行减少1,这样就可以最后得到最大。感想:难度不大,但是很难读懂题目。#include#include#include#includeu原创 2016-03-20 18:59:56 · 343 阅读 · 0 评论 -
Problem D & Problem J
概述:一个字符用8位表示,给出一个字符串,求出这个字符串的所占的位和压缩后所占的位以及压缩比。思路:哈夫曼树问题,建立哈夫曼模型,求解即可。感想:这题真的好难好难,自己做根本做不出来,后来问了其他同学,才知道这是个哈夫曼树的典型例题,当时一听就蒙了,这是个什么东东??于是我查询了一下资料并且上网学习了一下才豁然开朗。。哎,学无止境。#include#include#include原创 2016-03-20 17:56:51 · 409 阅读 · 0 评论 -
Problem C
概述:田忌赛马问题,Tian(田忌)赢一局得200分,King赢一局得200分,求最后Tian的得分。思路:从Tian的角度出发,用自己的弱马,去抵消King的强马,一步步贪心,实现利益最大化。首先将Tian和King的马按照战力从大到小排列,从Tian战力最小的马开始挑战,如果King的马中有有其能战胜的马,就用它去战胜该马,并+200分,如果没有它能战胜的马,就用它去抵消掉King战力最强原创 2016-03-20 17:45:10 · 430 阅读 · 0 评论 -
Problem R
概述:有一种6*6的箱子,有1*1, 2*2, 3*3, 4*4, 5*5, 6*6类型的货物,问给定的货物最少需要多少箱子才能全部装上。思路:1个6*6,5*5,4*4的货物占用1个箱子,4个3*3的货物占1个箱子,9个2*2的货物占1个箱子,36个1*1的货物占1个箱子.。先计算6,5,4的货物占用的箱子,在计算3占用的箱子,并记录下多余出的3,然后用3和4余出的空位填2,然后用所有的空位原创 2016-03-14 21:59:16 · 425 阅读 · 0 评论