有
经典贪心题目,白书上好像有原题吧。
思路就是将所有的产品按递送时间从大到小排序,然后直接从前往后做就行了。
证明:
首先,显然完成所有产品的时间是确定的。然后我们考虑交换两个产品的制作顺序。
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
int N;
struct task_
{
int T,L;
}task[110]={{0,0}};
bool cmp(struct task_ a1,struct task_ a2)
{return a1.L>a2.L;}
int main()
{
scanf("%d",&N);
for(int i=1;i<=N;i++)
scanf("%d",&task[i].T);
for(int i=1;i<=N;i++)
scanf("%d",&task[i].L);
sort(task+1,task+N+1,cmp);
int st=0;
int ans=0;
for(int i=1;i<=N;i++)
{
st+=task[i].T;
ans=max(ans,st+task[i].L);
}
cout<<ans<<endl;
return 0;
}
原文:http://blog.csdn.net/qq_21995319/article/details/46315395