ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PaintHouse I

2021-07-23 09:03:23  阅读:92  来源: 互联网

标签:vector ColorCostDP int PaintHouse costN cost 14


ColorCostDP.hpp

//
// Created by Administrator on 2021/7/21.
//

#ifndef C__TEST01_COLORCOSTDP_HPP
#define C__TEST01_COLORCOSTDP_HPP

#include <vector>

class ColorCostDP {
public:
    ColorCostDP(vector<vector<int>> costN, int N);
    void printData();
    int algorithmDP(vector<vector<int>> &cost, int &N);
private:
    int N;                      // array of bulidings
    vector<vector<int>> cost;
};
ColorCostDP::ColorCostDP(vector<vector<int>> costN, int N):
        cost(costN), N(N)
{
    cost.resize(costN.size());
    for (int i = 0; i < costN.size(); ++i) {
        cost[i].resize(costN.size());
    }
}

void ColorCostDP::printData() {
    for(int i; i<cost.size();++i){
        for (int j = 0; j < cost[i].size(); ++j) {
            cout<<cost[i][j]<<" ";

        }
    }
}

int ColorCostDP::algorithmDP(vector<vector<int>> &cost, int &N){
    vector<vector<int>> f;
    f.resize(N+1); //f[1] is the first buliding
    for(int i = 0; i<f.size(); ++i)
        f[i].resize(3); //color of every buliding

    for(int i = 0; i<f.size(); ++i){
        if(i == 0) {
            f[0][0] = f[0][1] = f[0][2] = 0; //Initialization
            continue;
        }
        if(i == 1) {
            f[i][0] = cost[i-1][0];
            f[i][1] = cost[i-1][1];
            f[i][2] = cost[i-1][2]; //Initialization
            continue;
        }
        for(int j = 0; j < 3; ++j){
            f[i][j] = INT_MAX;
            for(int k = 0; k < 3; ++k){
                if(j == k) continue;
                if(f[i-1][k] + cost[i-1][j]<f[i][j])
                    f[i][j] = f[i-1][k] + cost[i-1][j];
            }
        }
    }
    int result = INT_MAX;
    for(int i = 0; i<3; i++){
        if(f[f.size()-1][i] < result)
            result = f[f.size()-1][i];
    }
    return result;
}

#endif //C__TEST01_COLORCOSTDP_HPP

main.cpp

#include <iostream>
using namespace std;

/*
 * 有一排N栋房子,每栋房子要漆成3种颜色中的一种:红蓝绿
任何相邻的两栋房子不能漆成同样的颜色
第i栋房子要染成红色、蓝色和绿色的花费分别为cost[i][0] cost[i][1] cost[i][2]
问最少花多少钱
 例子:
 输入:
 - N = 3
 - Cost = [[14, 2, 11], [11, 14, 5], [14, 3, 10]]
 -输出:10
 * */
#include "ColorCostDP.hpp"

int main() {
    vector<vector<int>> cost = {
            {14, 2, 11},
            {11, 14, 5},
            {14, 3, 10},
    };
    int N = 4;
    ColorCostDP ccdp(cost, N);

    //ccdp.printData();
    int result;
    result = ccdp.algorithmDP(cost, N);

    cout << result << endl;

    return 0;
}

标签:vector,ColorCostDP,int,PaintHouse,costN,cost,14
来源: https://www.cnblogs.com/yoshinb/p/15047337.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有