算法第四章上机实践报告
算法第四章上机实践报告
一、程序存储问题
1、实践题目及问题描述
2、算法描述
这道题要求在一定的磁带长度中存取最多的数目,由于每个程序长度之间并没有联系,所以先直接对程序的长度进行排序,然后从小到大进行将程序长度相加并与给定的磁带长度进行比较得到结果。
实践代码
#include <iostream> #include <algorithm> using namespace std; int num[10005]; int main() { int n = 0 , k = 0; cin >> n >> k; for (int i = 1 ; i <= n ; i ++ ) { cin >> num[i]; } sort(num + 1 , num + n + 1 ); int sum = 0 , j = 0 ; for (int i = 1 ; i <= n ; i ++ ) { sum += num[i]; if ( sum > k ) { j = i - 1 ; break; } j = i; } cout << j; return 0; }
3、心得体会算法时间及空间复杂度分析
算法时间复杂度为O(nlogn),因为调用了sort函数进行排序。
4、心得体会
虽然说贪心算法是一种特殊的动态规划,贪心算法可以通过一个选择策略,直接得到一个局部最优解,而不需要通过递归遍历。其中的关键是如何证明贪心策略是正确的,并找到其中的最优解。