当前位置:网站首页>ACM寒假集训#6
ACM寒假集训#6
2022-07-28 10:13:00 【MJ的码农空间】
贪心算法
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。
算法思路
贪心算法一般按如下步骤进行:
①建立数学模型来描述问题。
②把求解的问题分成若干个子问题。
③对每个子问题求解,得到子问题的局部最优解。
④把子问题的解局部最优解合成原来解问题的一个解。
贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。贪心算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择,就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解。虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪心算法不要回溯。
使用条件
利用贪心法求解的问题应具备如下2个特征。
1、贪心选择性质
一个问题的整体最优解可通过一系列局部的最优解的选择达到,并且每次的选择可以依赖以前作出的选择,但不依赖于后面要作出的选择。这就是贪心选择性质。对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所作的贪心选择最终导致问题的整体最优解。
2、最优子结构性质
当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用贪心法求解的关键所在。在实际应用中,至于什么问题具有什么样的贪心选择性质是不确定的,需要具体问题具体分析。
题目示例
“今年暑假不AC?”
“是的。”
“那你干什么呢?”
“看世界杯呀,笨蛋!”
“@#$%^&*%…”
确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。
作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了所有你喜欢看的电视节目的转播时间表,你会合理安排吗?(目标是能看尽量多的完整节目)
Input
输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。
Output
对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行。
Sample Input
12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
0
Sample Output
5
代码示例
#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n!=0)//多组输入
{
int a[110],b[110],i,j,k,t,num=1;
for(i=0;i<n;i++)
scanf("%d %d",&a[i],&b[i]);
for(i=0;i<n-1;i++)//按结束时间排序
{
k=i;
for(j=i+1;j<n;j++)
{
if(b[k]>b[j])//找到最早结束的节目
k=j;
}
t=a[i];//将最早的节目交换到最前面
a[i]=a[k];
a[k]=t;
t=b[i];
b[i]=b[k];
b[k]=t;
}
j=0;
for(i=1;i<n;i++)//节目时间不冲突则num++
{
if(b[j]<=a[i])
{
num++;
j=i;
}
}
printf("%d\n",num);//输出
}
return 0;
}
边栏推荐
猜你喜欢
随机推荐
SQL Server 2016 学习记录 ---视图
What kind of knowledge payment system functions are more conducive to the development of the platform and lecturers?
中芯国际科创板IPO顺利过会,市值有望突破2000亿!
MySQL的SQL TRACE一例
Differences among pipes, pipe passes and pipe States
leetcode076——数组中的第 k 大的数字
Voice chat app - how to standardize the development process?
ogg参数filter的使用问题【急】
Sword finger offer
️雄关漫道真如铁,而今迈步从头越️
Install MySQL under centos7, and the online articles are not accurate
Lucene 查询语法备忘
jvm原理
Elk real time log analysis platform
Guangzhou metro line 14 xinshixu station is under construction, and residents in Baiyun District are about to start a double line transfer mode!
Go json.Decoder Considered Harmful
Netease written test No. 2 -- typical application of European distance
15. Judge whether the target value exists in the two-dimensional array
Typora tutorial
leetcode——旋转数组的最小数字








