杭电 2037(C)

看见csdn上搜索这个关键词好像没有什么C的代码,所以挂一下。
本人学才浅陋目前还没有学习所谓的“贪心”,纯属靠自己理解解的题,欢迎指正。

#include
int main() {
    int n;
    while (scanf_s("%d",&n)!=EOF&&n) {
    //输入时间
        int ti[100][2] = { 0 },sum=0,min=0,temp;
        int e = 1;
        for(int i=0;i<n;i++){
            scanf_s("%d %d", &ti[i][0],&ti[i][1]);
        }
        //开始时间从小到大排序排序,为后面挑选做铺垫
        for (int j = 0; j < n-1; j++) {
            min = ti[j][0];
            for (int i = j + 1; i < n; i++) {
                if (ti[i][0] < min) {
                    min = ti[i][0];
                    temp = ti[j][0];
                    ti[j][0] = ti[i][0];
                    ti[i][0] = temp;
                    temp = ti[j][1];
                    ti[j][1] = ti[i][1];
                    ti[i][1] = temp;
                }
           }
       }
       //挑选节目
       for (int i = 0; i < n-1; i++) {
           if (ti[i][1] > ti[i + 1][0]) {//比较前一个结束时间后一个开始时间
               if ((ti[i][1] - ti[i][0]) < (ti[i + 1][1] - ti[i + 1][0])) {//比较节目的长段,尽可能看多的节目,就选较短的
                   sum++;//选择前一个节目
                   i++;//放弃后一个节目
               }
               else {//选择后一个节目,sum(节目数)不增加,让其再进入循环查看跟再后一个节目比较
                   if (i == n - 2) {//若这个节目是最后一个则无需比较,直接加一
                       sum++;
                   }
               }
            }
            else {//相邻两个节目没有冲突的情况
                 if (i == n - 2) sum += 2;//如果两个节目是最后两个,直接加2
                 else sum++;
            } 
        }
        printf("%d\n", sum);
    }
    return 0;
}

你可能感兴趣的:(杭电 2037(C))