11729 - Commando War

来源:互联网 发布:刘项原来不读书 知乎 编辑:程序博客网 时间:2024/05/01 02:12

题目

Time limit: 1.000 seconds


解题思路

1.分别给每个士兵交代这件事是串行的,士兵们各自的战斗是并行的,所以接下来的目标就是尽可能早地结束战争,怎么办呢?

2.把战斗时间长的士兵排在前面,然后算出最晚结束战斗的时间,这个时间就是答案

3.算法的正确性显而易见

4.这里的排序用的是冒泡排序,时间复杂度是O(N^2)。另外,空间复杂度是O(N)

通过代码

#include<stdio.h>#define NUM 1005int B[NUM];int J[NUM];int main(){int N;int i,j;int time;int n=0;while(true){scanf("%d",&N);if(N==0)break;for(i=0;i<N;++i)scanf("%d%d",&B[i],&J[i]);for(i=N-1;i>0;--i)for(j=0;j<i;++j)if(J[j]<J[j+1]){int tmp=J[j];J[j]=J[j+1];J[j+1]=tmp;tmp=B[j];B[j]=B[j+1];B[j+1]=tmp;}time=B[0]+J[0];for(i=1;i<N;++i){B[i]+=B[i-1];int tmp=B[i]+J[i];if(tmp>time)time=tmp;//printf("debug:tmp=%d\n",tmp);}printf("Case %d: %d\n",++n,time);}return 0;}

运行截图






0 0