256 粉刷房子

题目描述:
假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。

当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的矩阵来表示的。

例如,costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2] 表示第 1 号房子粉刷成绿色的花费,以此类推。请你计算出粉刷完所有房子最少的花费成本。

注意:
所有花费均为正整数。

示例:
输入: [[17,2,17],[16,16,5],[14,3,19]]
输出: 10
解释: 将 0 号房子粉刷成蓝色,1 号房子粉刷成绿色,2 号房子粉刷成蓝色。
最少花费: 2 + 5 + 3 = 10。

方法1:动态规划
主要思路:
(1)直观的想,建立三个数组,分别表示当前要粉刷是 红色,绿色,和蓝色时,可以使用的最小的成本;
(2)例如,当前要使用红色,则只能在前一栋房子使用绿色和蓝色时的最小成本中,找出选项, 加上当前房子的红色成本,即为当前使用使用红色时,需要的成本;
(3)最终的最少的成本,在三种方案中选择一种即可;

class Solution {
public:
    int minCost(vector<vector<int>>& costs) {
    	//处理特殊的情形
        if(costs.empty())
            return 0;
        //三种数组
        vector<int> red(costs.size());
        vector<int> blue(costs.size());
        vector<int> green(costs.size());
        //初始化
        red[0]=costs[0][0];
        blue[0]=costs[0][1];
        green[0]=costs[0][2];
        //动态转移
        for(int i=1;i<costs.size();++i){
        	//只能从前一个的不同的颜色中的较小值,加上当前需要的颜色,来生成当前颜色小的最小值
            red[i]=min(green[i-1],blue[i-1])+costs[i][0];
            blue[i]=min(red[i-1],green[i-1])+costs[i][1];
            green[i]=min(red[i-1],blue[i-1])+costs[i][2];
        }
        return min(red.back(),min(blue.back(),green.back()));//返回三种颜色中的最小值
    }
};

方法2:动态规划
主要思路:
(1)思路和方法1一样,只不过观察到,上述的动态规划过程中,只需要当前元素的前一个元素,没必要使用整个数组,故可以压缩需要的内存;

class Solution {
public:
    int minCost(vector<vector<int>>& costs) {
        if(costs.empty())
            return 0;
       //压缩内存
        int min_red=costs[0][0];
        int min_blue=costs[0][1];
        int min_green=costs[0][2];
        for(int i=1;i<costs.size();++i){
        	//临时变量
            int tmp_red=min(min_green,min_blue)+costs[i][0];
            int tmp_blue=min(min_red,min_green)+costs[i][1];
            int tmp_green=min(min_red,min_blue)+costs[i][2];
            min_red=tmp_red;
            min_blue=tmp_blue;
            min_green=tmp_green;
        }
        return min(min_red,min(min_blue,min_green));//返回三种方案中的最小值
    }
};
内容概要:本文档主要介绍了Intel Edge Peak (EP) 解决方案,涵盖从零到边缘高峰的软件配置和服务管理。EP解决方案旨在简化客户的入门门槛,提供一系列工具和服务,包括Edge Software Provisioner (ESP),用于构建和缓存操作系统镜像和软件栈;Device Management System (DMS),用于远程集群或本地集群管理;以及Autonomous Clustering for the Edge (ACE),用于自动化边缘集群的创建和管理。文档详细描述了从软件发布、设备制造、运输、安装到最终设备激活的全过程,并强调了在不同应用场景(如公共设施、工业厂房、海上油井和移动医院)下的具体部署步骤和技术细节。此外,文档还探讨了安全设备注册(FDO)、集群管理、密钥轮换和备份等关键操作。 适合人群:具备一定IT基础设施和边缘计算基础知识的技术人员,特别是负责边缘设备部署和管理的系统集成商和运维人员。 使用场景及目标:①帮助系统集成商和客户简化边缘设备的初始配置和后续管理;②确保设备在不同网络环境下的安全启动和注册;③支持大规模边缘设备的自动化集群管理和应用程序编排;④提供详细的密钥管理和集群维护指南,确保系统的长期稳定运行。 其他说明:本文档是详细描述了Edge Peak技术及其应用案例。文档不仅提供了技术实现的指导,还涵盖了策略配置、安全性和扩展性的考虑,帮助用户全面理解和实施Intel的边缘计算解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值