你有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;
} 不过我写不出来。