您的位置:首页 > 其它

11729 - Commando War

2016-03-21 18:25 381 查看


题目

Time limit: 1.000 seconds




解题思路

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

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

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

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


通过代码

#include<stdio.h>
#define NUM 1005

int 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;
}




运行截图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: