导航:首页 > 源码编译 > 会议安排c语言贪心算法

会议安排c语言贪心算法

发布时间:2024-02-04 20:50:09

1. 收集各类贪心算法(C语言编程)经典题目

举个例子,假如你买东西,老板需要找给你99分钱,他有上面面值分别为25分,10分,5分,1分的硬币(都是假如,不符合实际),他得找你3个25分,2个10分的,4个1分的才为最佳方案!
用贪心算法编写程序实现!
main()
{
int
i,a[5],b[4],c[4];
/*
define
the
type
of
the
money*/
a[1]=25;
a[2]=10;
a[3]=5;
a[4]=1;
printf("please
input
you
money
(fen):\n");
scanf("%d",&b[0]);
for
(i=1;i<=4;i++)
{
b[i]=b[i-1]%a[i];
/*take
n
25
off
and
money
left*/
c[i]=(b[i-1]-b[i])/a[i];
/*
n
*/
printf("%d
is
%d\n",a[i],c[i]);
}
getch();
}

2. C语言程序问题——活动安排问题

题目出得不严密,题目要求是“计算安排的活动最多时会场使用时间”,但当“安排的活动最多”有多种安排方式,题目中却没说输出这多种方式中的哪一种的会场使用时间。例如 :当有3项活动要安排,开始时间和结束时间分别是1 2、3 5、4 5,这时可以安排第一项和第二项活动,也可以安排第一项和第三项活动,前者的会场使用时间是5,后者是4,这时是输出4还是5,题目中没用指出。先假设测试数据不会出现上述情况,则利用贪心算法求解活动安排问题是一种最常用的方法:#include<stdio.h>
#include<stdlib.h>
struct activity
{
int start;
int end;
}act[8501];
int comp(const void *p, const void *q)
{
struct activity *a=(struct activity *)p;
struct activity *b=(struct activity *)q;
return a->end-b->end;
}
int main()
{
int i,k,res,e;
while(scanf("%d",&k)!=EOF)
{
for(i=0;i<k;i++) scanf("%d%d",&act[i].start,&act[i].end);
qsort(act,k,sizeof(act[0]),comp);
res=act[0].end-act[0].start+1;
e=act[0].end;
for(i=1;i<k;i++)
{
if(act[i].start>e)
{
res+=act[i].end-act[i].start+1;
e=act[i].end;
}
}
printf("%d\n",res);
}
return 0;
}

3. 贪心算法——活动安排问题

•贪心算法的特点是每个阶段所作的选择都是局部最优的,它期望通过所作的局部最优选择产生出一个全局最优解。

贪心与动态规划: 与动态规划不同的是,贪心是 鼠目寸光 ;动态规划是 统揽全局

–动态规划:每个阶段产生的都是全局最优解

•第i阶段的“全局”: 问题空间为(a1, … , ai)

•第i阶段的“全局最优解”:问题空间为 (a1, … , ai)时的最优解

–贪心:每个阶段产生的都是局部最优解

•第i阶段的“局部”:问题空间为按照贪心策略中的优先级排好序的第i个输入ai

•第i阶段的“局部最优解”: ai

•贪心选择性质:所求问题的全局最优解可以通过一系列局部最优的选择(即贪心选择)来达到。

–这是贪心算法与动态规划算法的主要区别。

•最优子结构性质:当原问题的最优解包含子问题的最优解时,称此问题具有最优子结构性质。

最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征

•要求高效地安排一系列争用某一公共资源(例如会议室)的活动(使尽可能多的活动能兼容使用公共资源)。

–设有n个活动的集合E={e1,e2…en},其中每个活动都要求使用同一资源,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si<fi。如果选择了活动i,则它在半开时间区间[si,fi)内占用资源。

–若区间[si,fi)与区间[sj,fj)不相交,则称ei和ej是相容的。也就是说,当si≥fj或sj≥fi时,活动i和活动j相容。

•活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合。

4. 求C语言或c++的贪心算法的例题

比如:
int a=3,b=4,c;
c=a+++b;
将被解释为
c=(a++)+b;
而不会被解释为
c=a+(++b);
贪心算法的主要意义是从左至右依次解释最多的符号!

5. C语言,贪心算法,货币找零问题

贪心算法找零就是现实中从最大面额开始找的思路。不代表是最优解,只是算法之一。

由于面额输入顺序不定,我先对输入的面额进行降序排序。

下面代码:

#include <stdio.h>

#include <malloc.h>

int main()

{

int i,j,m,n,*ns=NULL,*cn=NULL,sum=0;

printf("请输入总金额m及零钱种类n:"),scanf("%d",&m),scanf("%d",&n);

printf("请分别输入%d种零钱的面额: ",n);

if(!(ns=(int *)malloc(sizeof(int)*n))) return 1;

if(!(cn=(int *)malloc(sizeof(int)*n))) return 1;

for(i=0;i<n;i++) scanf("%d",&ns[i]);

//------------考虑输入面额顺序不定,先对面额进行降序排列(如按照降序输入,该段可删除)

for(i=0;i<n;i++)

for(j=i+1;j<n;j++)

if(ns[j]>ns[i]) ns[j]^=ns[i],ns[i]^=ns[j],ns[j]^=ns[i];

//-------------------------------------------------------------------

for(i=0;i<n;i++)//贪心算法,从最大面额开始

if(m>=ns[i])

cn[i]=m/ns[i],m=m%ns[i],sum+=cn[i],printf("%d元%d张 ",ns[i],cn[i]);

printf(" 最少使用零钱%d张 ",sum);

return 0;

}

阅读全文

与会议安排c语言贪心算法相关的资料

热点内容
设备部门如何做好服务器 浏览:847
androido下载 浏览:476
神奇高量战法副图源码 浏览:828
汇编语言设计凯撒密码加密器 浏览:390
主次梁加密是加在哪里 浏览:662
模板匹配算法matlab 浏览:823
外地程序员去北京 浏览:22
安卓机换苹果12如何转移数据 浏览:418
互联网ntp服务器地址及端口 浏览:613
pdf到word转换器 浏览:267
飞行解压素材 浏览:498
51单片机指令用背吗 浏览:936
unityai算法 浏览:834
我的世界ice服务器如何打开pvp 浏览:975
c语言编程如何做标记 浏览:884
python数据分析实战pdf 浏览:985
u盘插入文件夹 浏览:918
华为amd云服务器 浏览:497
汉化编程卡是什么意思 浏览:128
python学习pdf 浏览:316