贪心算法的C语言实现与运用详解_C 语言

贪心算法

同样贪心算法是指,解决争端,永远在当时做出最好的选择。。更确切地说,不被以为是究竟哪个人整个,在一种意思上,他所做的仅有的究竟哪个人部分最优的receiver 收音机。。

贪心算法责备对迷住成绩都能获益整个最优解,但关于海外的成绩,他可以发生大局最优解。。贪心算法的见解列举如下:

1。构筑数学模型来描画成绩。

2。把这个成绩陷入几跑到成绩。

三。每跑到成绩的解,子成绩的部分最优解。

4。求解子成绩的部分最优解分解悬胶。

算法的实现预期的结果进程:

从究竟哪个人成绩的初始解开端;

 while 行进一步跑到设置的总目的

do 究竟哪个人可以通行的解的解元素;

由迷住解元结合的可以通行的解。;

#include ""
void main()
{ 
   int act[11][3]={{1,1,4},{2,3,5},{3,0,6},{4,5,7},{6,5,9},  
   {7,6,10},{8,8,11},{9,8,12},{10,2,13},{11,12,14}};
   贪心(行为),11);
   getch();
}
int 贪心 *act,int n)
{ 
   int i,j,no;
   j=0; 
   选择 使焦虑:/N) 
   no=0; 
   printf("Act.%2d: Start time %3d, finish time %3d/n", 行为[不],act[no+1],act[no+2]);
  (I=1;I)=act[j*3+2])  
       { 
         j=i; 
         printf("Act.%2d: Start time %3d, finish time %3d/n",    行为[不],act[no+1],act[no+2]); 
       } 
    }
 }

 实习

    标题问题描画: 
到卒业季,很多大公司来神学院学生新成员,新成员会疏散在形形色色的时期,小明想弄明白本人至多能的完整的的接合处很个新成员会(接合处究竟哪个人新成员会的时辰不克不及挂或分开)。 
出口: 
第党派的n,有N个新成员会,下党派的N行表现两个概数,表现开端和终止时期。,从新成员的第一天到晚开端的小时数将从0开端。。 
n <= 1000 。 
出口: 
新成员运动会次数至多。 
样例出口: 

9 10 
10 20 
8 15 
样例出口: 

使焦虑选择成绩
概述
成绩是为提供几个的竞争的新成员会。,他们都断言共享资源的独家应用(肖明)。调整的目的是找出最大的一组共同的相容的的行为。。这时是需求应用一种资源的N个使焦虑的集中(XI),a2,…,安}此资源仅仅一次工作究竟哪个人使焦虑。。每个使焦虑AI具有开端时期Si和完毕时期Fi。,且0<=si在时期完毕时以升序得第二名迷住使焦虑

2015816171405412.jpg (233×142)

定理
关于究竟哪个非空成绩SIJ,设置AM是Sij中最早完毕时期的使焦虑。:
FM=min {FK:AK属于Sij }
这么,
1)活跃的AM用于SIJ的最大活跃的参加经过。
2)子成绩SIM是空的,因而选择AM会使子成绩SMJ发生超绝不可能的的子成绩。

交流码

  #include <> 
  #include  
  #include  
    
  struct join 
  { 
    int begin; 
    int end; 
  }; 
    
  int 区别(常数) void *a, const void *b); 
    
  int main() 
  { 
    int i, n, k; 
    struct join 接合处[ 1001 ], 发烧[ 1001 ] 
    
    (SnF)(%d), &n) != EOF) 
    { 
      为了(我) = 0; i < n; i ++) 
      { 
        scanf("%d %d", &joins[i].begin, &joins[i].end); 
      } 
        
      qsort(joins, n, sizeof(joins[0]), compare); 
    
      k = 0; 
      temp[k] = joins[0]; 
      为了(我) = 1; i < n; i ++) 
      { 
        if(joins[i].begin >= TEMP[K] 
          temp[++ k] = 接合处[我] 
      } 
      printf("%d\n", k + 1); 
    } 
      
    return 0; 
  } 
    
  int 区别(常数) void *a, const void *b) 
  { 
    const struct join *p = a; 
    const struct join *q = b; 
    
    return p->end - q->end; 
  } 

    /**************************************************************
Problem: 1463
User: wangzhengyi
Language: C
Result: Accepted
时期:10 ms
Memory:904 kb
****************************************************************/ 

发表评论

Close Menu