• 贪心算法之活动安排问题


    前言

    最近时间还是比较紧张的,对于算法这一块,网上也有好多大神写了不少这样的文章,我有时候不明白了,看不懂课本,就看看别人写的东西,看得多了,也就懂了一些什么。所以这里,就不再详细的说明活动安排问题的内容,直接上代码。其实书上的算法看明白了,写代码也很轻松的,关于有些衔接部分就需要有更深的领悟。

    代码

    关于本程序,之前用C语言写了一个,但是不是很方便,因为算法中用到的true false bool类型,有点麻烦,所以我感觉对于算法的实现用c++会比较方便吧。这个看个人喜好,喜欢C语言的就坚持,反正都能解决问题。
    C++代码

    1. #include <iostream>
    2. using namespace std;
    3. void GreedSelector(int n,int s[],int f[],bool A[]);
    4. const int n = 11;
    5. int main()
    6. {
    7. int s[12]={0,1,3,0,5,3,5,6,8,8,2,12},f[12]={0,4,5,6,7,8,9,10,11,12,13,14};
    8. bool A[n+1];
    9. GreedSelector(n,s,f,A);
    10. cout<<"最大相容活动安排为:"<<endl;
    11. for(int i=1;i<=n;i++)
    12. {
    13. if(A[i])
    14. {
    15. cout<<"["<<i<<"]:"<<"("<<s[i]<<","<<f[i]<<")"<<endl;
    16. }
    17. }
    18. return 0;
    19. }
    20. void GreedSelector(int n,int s[],int f[],bool A[])
    21. {
    22. A[1]=true;
    23. int j=1;
    24. for (int i=2;i<=n;i++)
    25. {
    26. if(s[i]>=f[j])
    27. {
    28. A[i]=true ;
    29. j=i;
    30. }
    31. else
    32. {
    33. A[i]=false;
    34. }
    35. }
    36. }
    37. C 代码
    38. #include <stdio.h>
    39. #include <stdlib.h>
    40. typedef int bool;
    41. #define true 1
    42. #define false 0
    43. int GreedSelector(int n,int s[],int f[],bool A[])
    44. {
    45. A[1]=true;
    46. int i,j=1,count=1;
    47. for (i=2;i<=n;i++)
    48. {
    49. if(s[i]>=f[j])
    50. {
    51. A[i]=true ;
    52. j=i;
    53. count++;
    54. }
    55. else A[i]=false;
    56. }
    57. return count;
    58. }
    59. int main()
    60. {
    61. int i,n=11;
    62. int p;
    63. int s[12]={0,1,3,0,5,3,5,6,8,8,2,12},f[12]={0,4,5,6,7,8,9,10,11,12,13,14};
    64. bool A[12];
    65. //printf("输入节目数:\n");
    66. //scanf("%d",&n);
    67. /*printf("请依次输入节目的开始和结束时间\n");
    68. for(i=0;i<n;i++)
    69. {
    70. scanf("%d %d",&s[i],&f[i]);
    71. }*/
    72. p=GreedSelector(n,s,f,A);
    73. printf("安排的节目个数为:%d\n",p);
    74. printf("节目的选取情况为(0表示不选 1表示选取):\n");
    75. for(i=1;i<=n;i++)
    76. printf("%d ",A[i]);
    77. printf("\n");
    78. return 0;
    79. }
  • 相关阅读:
    windows设置开机启动程序
    基于JavaWeb+SSM+Vue“鼻护灵”微信小程序系统的设计和实现
    教程 - 深度探讨在 Vue3 中引入 CesiumJS 的最佳方式
    不知道什么的复习题
    让我们用ArcGIS制作一张好看的中国月度气温图
    CS224W2.2——传统基于特征的方法(边层级特征)
    常见分布式理论(CAP、BASE)和一致性协议(Gosssip、Raft)
    JavaWeb基础学习Servlet进阶
    阿里巴巴全球数学竞赛
    winrssrv.dll:深入解析其功能与缺失修复指南
  • 原文地址:https://blog.csdn.net/G11176593/article/details/128058552