zoj 1012

来源:互联网 发布:java windows api 编辑:程序博客网 时间:2024/05/29 02:17
// 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之后都要输出一个换行符。