UVA_102_Ecological Bin Packing

9 篇文章 0 订阅
#include<iostream>
#include<sstream>
#include<algorithm>
#include<vector>
#include<string>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::string;
using std::next_permutation;
using std::stringstream;
using std::sort;
using std::unique;
using std::swap;
int main()
{
    //生成二维数组
    s:vector<vector<int>>bin(3);
    for (vector<int>::size_type i = 0; i < 3; i++)
    {
        bin[i].resize(3);
    }
    //输入
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            int num; cin >> num;
            bin[i][j] = num;
        }
    }
    //使数据横纵都排列成BCG
    for (int i = 0; i <3; i++)
    {
        swap(bin[i][1], bin[i][2]);
    }
    //分别计算B,C,G的垃圾总和
    int Brown_sum = bin[0][0]+bin[1][0]+bin[2][0], 
        Clear_sum = bin[0][1] + bin[1][1] + bin[2][1],
        Green_sum = bin[0][2] + bin[1][2] + bin[2][2];
    string code = "012", code_min = "999";
    int count = 1000000000;
    do
    {
        int sum = Brown_sum - bin[0][code[0] - '0']
             +Clear_sum - bin[1][code[1] - '0']
        +Green_sum- bin[2][code[2] - '0'];
        
        if (count > sum)
        {
            count = sum;
            code_min = code;
        }
        else if (count == sum)
        {
            code_min = code_min < code ? code_min : code;
        }
    } while (next_permutation(code.begin(), code.end()));
    for (int i = 0; i < 3; i++)
    {
        switch (code_min[i])
        {
        case '0':cout << 'B'; break;
        case '1':cout << 'C'; break;
        case '2':cout << 'G'; break;
        }
    }
    cout << ' ';
    cout << count << endl;
    cin.get();
    if (cin.peek() != EOF)
    {
        goto s;
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值