【ybtoj】贪心算法例题】的更多相关文章

[基础算法]第二章 贪心算法 例一 奶牛晒衣服 题目描述 有n件衣服,第i件衣服的湿度为h. 在自然条件下,每件衣服每分钟都可以自然晒干A点湿度. 在烘干机作用下,可以选择一件衣服,用一分钟的时间晒干B点湿度. 求出晒干所有衣服的最少时间(湿度为0为干). 输入格式 第一行三个正整数N,A,B. 接下来N行,第i行一个正整数,表示第i件衣服的湿度 h. 输出格式 输出一个数,表示晒干所有衣服的最少时间. 样例输入 3 2 1 1 2 3 样例输出 1 分析 在不考虑烘干机的情况下,最后一件烘干的…
参考: 五大常用算法之三:贪心算法 算法系列:贪心算法 贪心算法详解 从零开始学贪心算法 一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解. 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择.必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关. 所以对所采用的贪心策略一定要仔细分析其是否满…
剑指Offer--贪心算法 一.基本概念 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解.虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解.如单源最短路经问题,最小生成树问题等.在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似. 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择.必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪…
先贴问题: 1个n位正整数a,删去其中的k位,得到一个新的正整数b,设计一个贪心算法,对给定的a和k得到最小的b: 一.我的想法:先看例子:a=5476579228:去掉4位,则位数n=10,k=4,要求的最小数字b是n-k=6位的: 1.先找最高位的数,因为是6位数字,所以最高位不可能在后5位上取到(因为数字的相对顺序是不能改变的,假设如果取了后五位中倒数第5位的7,则所求的b就不可能是6位的了,最多也就是4位的79228)理解这点很重要!所以问题变成从第1位到第k+1(n-(n-k-1))取…
Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one sha…
一道非常简单的贪心算法,但是要注意输入的价值是单位体积的价值,并不是这个物品的总价值!#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; struct CT{ int pi; int mi; }; int cmp( CT p1 , CT p2 ){ return p1.pi > p2.pi ; } int main() { int sum , V , n…
1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2,6],[1,4],[3,6],[3,7],[6,8],[2,4],[3,5] 解题过程: 1将每一个区间按照左端点递增顺序排列,拍完序后为[1,4],[2,4],[2,6],[3,5],[3,6],[3,7],[6,8] 2设置一个变量表示已经覆盖到的区域.再剩下的线段中找出所有左端点小于等于当前已经覆盖到的区…
(一) 这个算法是基于一个概率来对探索和利用进行折中:每次尝试时,以概率进行探索,即以均匀概率随机选取一个摇臂,以的概率进行利用,即以这个概率选择当前平均奖赏最高的摇臂(如有多个,则随机选取). 其中:小k表示第k个摇臂.因为大K表示摇臂总数:n表示尝试的次数,vn表示第n次尝试的奖赏. Qn的直观意思为:为前n-1次的平均奖赏.当其与n-1相乘所得是前n-1次总奖赏.再加上第n次的奖赏,处于n,则为n次的平均奖赏. 其中:argmax为选取最优的Q(i).count是从0开始的,故count(…
题目 本题的贪心算法策略需要深入思考一下 看到题目,最初没有理解题目的要求:看尽量多的完整的节目.尽量多是指数量多,自己理解成观看的时间最长.这样想其实简化了这道题. 正确理解题意后,首先想到的想法是:选择一个节目A,结束后选择另一个节目,如果节目A的时间同时覆盖了节目BC的时间,那么A就不应该看.怎么选择合适的节目?如果都把所有的节目考察一遍,统计看到的节目数量,成了穷举法,不是贪心算法. 遇到第一个关卡:如何在思维上找到突破口/切入点,当思路到达"如何选择合适的节目"这个问题时卡住…
//贪心算法解决加油站选择问题 //# include<iostream> # include<stdio.h> using namespace std; # include<algorithm> struct Node { float p, d; }; bool cmp(Node a, Node b) { return a.d < b.d; } int main() { Node node[]; float Cmax, D, Davg, distance, pr…