// C++Exercise.cpp : 定义控制台应用程序的入口点。
//
#include<iostream>
#include<string>
#include<stack>
#include<map>
#include<vector>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstdio>
using namespace std;
typedef struct{
int a, b, t, u, v, w, x;
}job;
vector<job> que;
int M, N, L;
int F;
bool compare(job a,job b){
if (a.t != b.t) return a.t < b.t;
else return a.v > b.v;
}
int main(){
int Case = 0;
while (cin >>F&&F){
Case++;
que.clear();
cin >> M >> N >> L;
for (int i = 0; i < L; i++){
job temp;
cin >> temp.a >> temp.b >> temp.t >> temp.u >> temp.v >> temp.w >> temp.x;
que.push_back(temp);
}
sort(que.begin(),que.end(),compare);
int sum = 0;
vector<bool> finish(L,0);
for (int i = 0; i < F; i++){
int Cpu = M;
int Source = N;
for (int j = 0; j < L; j++){
if (que[j].t > i) break;
if (Cpu >= que[j].a&&Source>=que[j].b&&!finish[j]){
Cpu -= que[j].a;
Source -= que[j].b;
finish[j] = true;
sum += que[j].v;
if (i + 1 >= que[j].u){
sum -= (i + 1 - que[j].u)*que[j].x;
}
else{
sum += (que[j].u - i - 1)*que[j].w;
}
}
}
}
for (int i = 0; i < L; i++){
if (!finish[i] && que[i].u < F){
sum -= (F - que[i].u)*que[i].x;
}
}
cout << "Case " << Case << ": ";
cout << sum << endl<<endl;
}
return 0;
}
简单的题目,就是模拟。但是注意在每一个Case之后都要输出一个换行符。
zoj 1012
最新推荐文章于 2021-10-08 09:32:50 发布