你有n个部下,每个部下需要完成一项任务。第i个部下需要你花Bi分钟交代任务,然后他会独立地、无间断地执行Ji分钟后完成任务。你需要选择交代任务的顺序,使得所有任务尽早执行完毕(即最后一个执行完的任务应尽早结束)。注意,不能同时给两个部下交代任务,但部下们可以同时执行他们各自的任务。
输入格式:
输入包含多组数据,每组数据的第一行为部下的个数N(1<=n<=1000);以下N行每行两个正整数B和J(1<=B<=10000,1<=J<=10000),即交代任务的时间和执行任务的时间。输入结束表示为N=0。
输出格式:
对于每组数据,输出所有任务完成的最短时间。
样例输入:
3
2 5
3 2
2 1
3
3 3
4 4
5 5
0
求一个用c++的class类的方法写的代码,谢谢大佬。
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
struct work {
 int fen;
 int zuo;
}ren[10001];
bool cmp(work a, work b) {
 return a.zuo>b.zuo;
}
int main() {
 int n, count = 1;
 while (~scanf("%d", &n) && n) {
 for (int i = 0; i<n; i++)
 scanf("%d %d", &ren[i].fen, &ren[i].zuo);
 sort(ren, ren + n, cmp);
 int sum = 0, ans = 0;
 for (int i = 0; i<n; i++)
 {
 ans += ren[i].fen;
 if (ans + ren[i].zuo>sum)
 sum = ans + ren[i].zuo;
 }
 printf("Case %d: %d\n", count++, sum);
}
}
这里有思路。
下面是我写的,可以给点指点。
#include<iostream>
#include<algorithm>
using namespace std;
class work
{
public :
 work(int x,int y);
 void print();
 bool com(int x,int y);
private:
 int fen;
 int zuo;
}w[1000];
work::work(int x,int y)
{
 fen = x;
 zuo = y;
}
void work::print()
{
 cout << fen << zuo << endl;
}
bool com(work.fen1, work.fen2 )
{
return f1 > f2;
}
int main()
{
 int n;
 while ((cin >> n) && n != 0)
 {
 for (int i = 0; i < n; i++) {
 int x, y;
 cin >> x>>y;
 w[i] = work(x, y);
 }
 sort();
 
 
 }
 return 0;
}  不过我写不出来。