1. 题目链接:1025 答疑
贪心类型的题目做法很简单,只需要保证局部解最优即可保证整体解最优。
这里的思路就是第i个学生前面的人答疑所用的时间最短,那么他所发送短信的时间节点越小。这道题目有个需要注意的点是:要先将前i-1个学生所用的总时长加到res统计结果的计数器中,再加上第i个学生的进入时间和答疑时间才是正确的数据,不能加漏。以及语句之中的空格能不打就不打,以免出现不必要的错误。
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e3+5;
struct student{long long int s,a,e;unsigned long long int sum1,sum2;
}stud[maxn];
bool cmp(student x,student y)
{if(x.sum1 == y.sum1) return x.sum2<y.sum2;else return x.sum1<y.sum1;
}
int main()
{int n;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%lld %lld %lld",&stud[i].s,&stud[i].a,&stud[i].e);stud[i].sum1=stud[i].s+stud[i].a+stud[i].e;stud[i].sum2=stud[i].s+stud[i].a;}sort(stud,stud+n,cmp);long long int res=0,temp=0;for(int i=0;i<n;i++){res +=temp+stud[i].sum2;temp +=stud[i].sum1;}printf("%lld",res);return 0;}