XOSCATS银行家算法

#include <bits/stdc++.h>
const int N = 1e5 + 10;
using namespace std;
using LL = long long;

vector<array<int,3>> Max(5),All(5),Need(5);
bool st[10];

signed main() {
    int za,zb,zc;
    cin >> za >> zb >> zc; //读入资源总量
    for(int i = 0; i <= 4; i++){
        cin >> Max[i][0] >> Max[i][1] >> Max[i][2]; //读入Max
    }
    for(int i = 0; i <= 4; i++){
        cin >> All[i][0] >> All[i][1] >> All[i][2];//读入Allocation
    }

    cout << "Need:\n";
    for(int i = 0; i <= 4; i++){
        for(int j = 0; j < 3; j++)
            {
                Need[i][j] =  Max[i][j] - All[i][j];
                cout << Need[i][j] << ' ';
            }
        cout << '\n';
    } 
    array<int,3> work;
    work[0] = za - All[0][0] -  All[1][0] - All[2][0] - All[3][0] - All[4][0];
    work[1] = zb - All[0][1] -  All[1][1] - All[2][1] - All[3][1] - All[4][1];
    work[2] = zc - All[0][2] -  All[1][2] - All[2][2] - All[3][2] - All[4][2];

    cout << "A: " << work[0] << " ";
    cout << "B: " << work[1] << " ";
    cout << "C: " << work[2] << " ";
    cout << '\n';


    int idx = 0;
    int flag = 0;

    while(1){
        if(flag == 5) break;
        if(st[idx] == 0 && Need[idx][0] <= work[0] && Need[idx][1] <= work[1] && Need[idx][2] <= work[2]){
            st[idx] = 1;
            printf("p%d %d %d %d   %d %d %d   ",idx,work[0],work[1],work[2],Need[idx][0],Need[idx][1],Need[idx][2]);
            printf("%d %d %d   %d %d %d\n",All[idx][0],All[idx][1],All[idx][2],work[0]+All[idx][0],work[1]+All[idx][1],work[2]+All[idx][2]);
            work[0] += All[idx][0];
            work[1] += All[idx][1];
            work[2] += All[idx][2];
            flag++;
        }
        idx++;
        if(idx == 5) idx = 0;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值