算法竞赛入门题目

http://10.1.5.12/JudgeOnline/problem.php?id=1957
题目链接;
做了好久,终于憋出来了这道题
首先的思路是 优先分配执行时间长的,但是一把执行时间排序之后会有一个问题;
那就是士兵的分配时间与执行时间会打乱;
那怎么办呢?我的办法是在建立一个数组把原来未排序的执行时间保存好,记住相应的位置,
在建立一个bool 型的数组防止重复,就可以解决问题了;
#include
#include
#include
#include
using namespace std;
int n,m,j,sum=0,t,s=0;
int a[1100],b[1100];
int c[1100];
bool d[1100];
int x=1;
int lmp(int x,int y)
{
return x>y;
}
int main()
{
for(;cin >> n;)
{
if(n==0) break;
int j;
int k=0;
sum=0;
s=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof©);
memset(d,0,sizeof(d));
for(int i=0;i cin >> a[i] >> b[i];
for(int i=0;i {
sum+=a[i];
c[i]=b[i];
}
sort(b,b+n,lmp);
sum+=b[n-1];
t=sum;
for(int i=0;i {
for(int j=0;j {
if(c[j]==b[i] && d[j]==0)
{
k=j;
d[j]=1;
break;
}
}
sum-=a[k];
if(b[i]>sum)
{
s=max(s,(b[i]-sum));
}
}
sum=t+s;
cout <<"Case "<< x << “:”<< " ";
cout << sum << endl;
x++;
}
return 0;
}

你可能感兴趣的:(算法竞赛入门题目)