假如有一种货币,它有面值为1分、2分、5分和1角的硬币,最少需要多少个硬币来找出K分钱的零钱?
按照贪心算法的思想,需要不断地使用面值最大的硬币。如果要找零的值小于最大的硬币值,则尝试第二大的硬币,依次类推。
代码如下:
#include
using namespace std;
#define ONE 1
#define TWO 2
#define FIVE 5
#define TEN...
分类:
编程语言 时间:
2015-03-02 22:30:04
阅读次数:
378
贪心算法分阶段工作。在每一个阶段,可以认为所做的决定是好的,而不考虑将来的后果。一般来说,这意味着选择的是某个局部最优。这种“眼下能够拿到的就拿”的策略是这类算法名称的来源。当算法终止时,我们希望局部最优就是全局最优。如果真是这样的话,那么算法就是正确的;否则,算法得到的是一个次最优解。如果不要.....
分类:
编程语言 时间:
2015-02-25 12:56:55
阅读次数:
175
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace SeqListSort{ /// /// /// lihonlin /// //...
分类:
编程语言 时间:
2015-02-25 00:39:26
阅读次数:
188
贪婪算法的基本思想:通过一系列步骤来构造问题的解,每一步都是对已构造的部分解的一个扩展,直到获得问题的完整解。贪婪算法中,每一步“贪婪地” 选择最好的部分解,但不顾及这样选择对整体的影响(局部最优),因此得到的全局解不一定最好的解,但对许多问题它能产生整体最优解。具体算法描述:public stat...
分类:
编程语言 时间:
2015-02-24 23:19:27
阅读次数:
267
贪心算法,从局部最优推广成全局最优。
这里介绍O(n)时间 O(n)和O(1)空间的两种实现方法。...
分类:
其他好文 时间:
2015-02-17 00:50:26
阅读次数:
174
AC代码如下:
#include
#include
#include
#include
using namespace std;
const int maxn=201314;
int main()
{
int n,a[maxn];
while(cin>>n)
{
for(int i=0;i>a[i];
...
分类:
其他好文 时间:
2015-02-09 20:21:01
阅读次数:
102
题意如下:
直线上有N个点,第i点的位置为Xi。从这N个点中选择若干个,给他们加行标记。对每一个点,其距离为R以内的区域里必须带有标记的点(自己本身带有标记的点,可以认为与其距离为0的地方有一个带有标记的点)。在满足这个条件的情况下,希望能为尽可能少的点添加标记。请问至少需要为多少个点添加上标记?...
分类:
其他好文 时间:
2015-02-09 14:13:43
阅读次数:
224
背景:因为一个小错误找了一个多小时,就是在输入数据的时候,雷达Q的作用范围可以为0.while(scanf("%d %d",&N,&Q)==2&&N)这句话千万不要写成while(scanf("%d %d",&N,&Q)==2&&N&&Q)
否则就会错。
思路:简单贪心,先要找出每个小岛可以被雷达发现的区间,然后就可以运用贪心算法了,先用sort按照区间左端点升序排列。然后如下运用贪心就可以了...
分类:
其他好文 时间:
2015-02-07 17:34:41
阅读次数:
133
题意:给定长度为N的字符串S,(字符串S全为大写字母组成)要构造一个长度也为N的字符串T。
起初,T是一个空串。随后反复进行下面任意操作:
1.从S的头部删除一个字符,然后加到T的尾部。
2.从S的尾部删除一个字符,然后加到T的尾部。
目的是要构成字典序尽可能小的字符串T。
思路:
从字典序的性质上看,无论T的末尾有多大,只要前面部分的较小就可以了!
所以我们可以初步得到下面的这种贪...
分类:
其他好文 时间:
2015-02-07 17:34:06
阅读次数:
244
有n项工作,每项工作分别在Si时间开始,然后在Ti时间结束。对于每项工作,你都可以选择参与或者不参与。如果你选择了参与,那么你必须自始至终都全程参与。此外,参与的时间段不能重叠。(即使是开始的瞬间和结束的瞬间的重叠也是不允许的)
时间不限,你的目的是参与尽可能多的工作,那么最多能参与多少项工作呢?
思路:贪心算法。->在可选的工作中,每次都选取工作结束时间最早的工作。结束时间越早之后可选的工作...
分类:
其他好文 时间:
2015-02-07 13:14:12
阅读次数:
168