度
if(b[i]>max)
max=b[i];
printf("%d\n",max);
}
return0;
}
运行结果
实验总结
通过实现动态规划的这个题目,对动态规划算法有了进一步的了
解。
先分析问题,判断是否具有最优子结果和重叠字问题的性质
实验三贪心算法的应用
一、实验目的
1.掌握贪心算法的基本概念和两个基本要素
2.熟练掌握贪心算法解决问题的基本步骤。
3.学会利用贪心算法解决实际问题。
二、实验容
题目三:
程序存储问题
设有n个程序{1,2,3,…,n}要存放在长度为L的磁带上。
程序i存放在磁带上的长度是li,1
要求确定这n个程序在磁带上的一个存储方案,使得能够在磁带上存储尽可能多的程序。
输入数据中,第一行是2个正整数,分别表示程序文件个数和磁带长度L。
接下来
的1行中,有n个正整数,表示程序存放在磁带上的长度。
输出为最多可以存储的程序个数。
输入数据示例
650
231388020
输出数据
5
3.题目分析:
题目要求计算给定长度的磁带最多可存储的程序个数,先对程序
的长度从小到大排序,再采用贪心算法求解。
3、算法设计:
a.定义数组a[n]存储n个程序的长度,s为磁带的长度;
b.调用库函数sort(a,a+n)对程序的长度从小到大排序;
c.函数most()计算磁带最多可存储的程序数,采用while
循环依次对排序后的程序
长度进行累加,用i计算程序个数,用sum计算程序累加长度
(初始i=0,sum=0):
1sum=sum+a[i];
2若sum<=s,i加1,否则i为所求;
3i=n时循环结束;
d.若while循环结束时仍有sum<=s,则n为所求。
源程序:
#include
usingnamespacestd
#include
inta[1000000];
intmost(int*a,intn,ints)
{
inti=0,sum=0;
while(i{
sum二a[i]+sum;
if(sum<=s)
i++;
elsereturni;
}
returnn;
}
main()
{
inti,n,s;
scanf("%d%d\n",&n,&s);
for(i=0;iscanf("%d",&a[i]);
sort(a,a+n);
printf("%d",most(a,n,s));
return0;
}
实验总结
此次实验让我对贪心算法的思想有了初步的了解,并且学会了用贪心算法解决一些实际问题。
两个程序中都运用了循环语句,在编写代码时,在循环语句的设置中遇到许多问题,经过调试最终解决。
所以,以后应当多做一些循环语句的练习。
通过实践加强编程的熟练程度