如何花最少的钱购买蔬菜

题目地址

题目描述

Description
Rahul wanted to purchase vegetables mainly brinjal, carrot and tomato. There are N different vegetable sellers in a line. Each vegetable seller sells all three vegetable items, but at different prices. Rahul, obsessed by his nature to spend optimally, decided not to purchase same vegetable from adjacent shops. Also, Rahul will purchase exactly one type of vegetable item (only 1 kg) from one shop. Rahul wishes to spend minimum money buying vegetables using this strategy. Help Rahul determine the minimum money he will spend.

Input
First line indicates number of test cases T. Each test case in its first line contains N denoting the number of vegetable sellers in Vegetable Market. Then each of next N lines contains three space separated integers denoting cost of brinjal, carrot and tomato per kg with that particular vegetable seller.

Output
For each test case, output the minimum cost of shopping taking the mentioned conditions into account in a separate line.

Constraints:1 <= T <= 101 <= N <= 100000 Cost of each vegetable(brinjal/carrot/tomato) per kg does not exceed 10^4

Explanation:
There are two ways, each one gives 52 as minimum cost. One way is buy brinjals from first shop, carrots from second shop and brinjals from third shop or he can buy brinjals from first shop, tomatoes from second shop and brinjals from third shop.
Both ways , cost comes up to 1 + 50 + 1 = 52

Sample Input 1

1
3
1 50 50
50 50 50
1 50 50

Sample Output 1

52
题目解析

题目有如下要求

  1. 不从邻近的商店购买同样的蔬菜。
  2. 一家商店购买一种蔬菜
  3. 必须挨着买,即先买第一家,再买第二家
  4. 不是所有的蔬菜都一定需要购买,可以不买某种蔬菜
思路解析

最优问题(最便宜)可以在选完前n-1个的基础上再选第n个,即min(n) = min(n-1) +min(cur)

可以从后往前倒着理解,即在最后一个商店,要么选择了第一种蔬菜,要么选择了第二种蔬菜,要么选择了第三种蔬菜.

假设我们在最后一个商店选了第1种蔬菜,那么在倒数第二个商店同样有三种选择…依次类推

如何构建dp数组

dp数组有几行代表就有几个商店,有几列代表有几个蔬菜,本题有3列.dp[i] [j] 代表当前选到当前商店的当前蔬菜的最少价格

如何更新dp数组
eg

数组更新过程
[[ 1 50 50]     [[  1  50  50]     [[  1  50  50][ 0  0  0]     [100  51  51]      [100  51  51][ 0  0  0]]     [  0   0   0]]     [ 52 101 101]]第二行
100 = min(50,50)+50
51 = min(1,50)+50
第三行
52 = min(100,51)+1
101 = min(100,51)+50
代码实现(python)
if __name__ == '__main__':for _ in range(int(input())):arr = []for _ in range(int(input())):temp_arr = list(map(int, input().strip().split()))arr.append(temp_arr)shop_num = len(arr)veg_num = 3dp = [[0] * veg_num for _ in range(shop_num)]  # 创建数组for i in range(veg_num):  #初始化第一行dp[0][i] = arr[0][i]for i in range(1, shop_num):for j in range(veg_num):  # j=1的话,就去找j=2,j=0  j=2的话,就去找j=0,j=1dp[i][j] = min(dp[i - 1][(j + 1) % 3], dp[i - 1][(j + 2) % 3]) + arr[i][j]print(min(dp[-1]))

[算法]如何花最少的钱购买蔬菜相关推荐

  1. 算法:如何花最少的钱购买蔬菜【动态规划】

    如何花最少的钱购买蔬菜 Description Rahul wanted to purchase vegetables mainly brinjal, carrot and tomato. There ...

  2. OJ如何花最少的钱购买蔬菜

    要求:需要购买三种蔬菜,三种蔬菜必须在不同的商店购买,使得花费最省. import java.util.Scanner;public class BuyVegetable {public static ...

  3. 南大高级算法作业之如何花最少的钱买蔬菜

    描述:三种菜,相邻的店不能买一种菜,同一种菜每个店的价格不一样 思路:简单的dp,建立n*3的数组,当前花的最少的钱就是上一行中不同列的最小值,加上当前数组值即可,这样迭代到最后一行,找出最小值. 代 ...

  4. 【程序员讲装修】如何花最少的钱做出最出彩的装修效果?

    [程序员讲装修]如何花最少的钱做出最出彩的装修效果? 前言 首先先自我介绍一下,做过程序员,也做过装修,现在自由职业.有空写写文章,用程序员的思维规范化系统化定义装修,梳理自己的装修知识模块,说不定这 ...

  5. 怎么花最少的钱用最多的流量?告诉你“保底+流量卡”才是王道.

    众所周知,三大运营商的流量太贵了,基本上可以划到5元/G了,那么,对于流量一族的用户来讲,怎么才能用最少的钱用最多的流量呢,接下来,我们一块来聊聊这个话题. 想要花最少的钱用最多的流量,这个时候你可以 ...

  6. 2021三大运营商资费上涨,哪种流量卡可以花最少的钱用最多的流量

    众所周知,三大运营商的无限流量早已退出舞台,目前的三大运营商的资费,可以用一个字来形容就是"贵",现在很多朋友从来都在打听有什么便宜的流量卡吗,接下来我们一块来看看. 近几年来,无 ...

  7. 正则不等于一个字符串_乳饮料不等于酸奶,记住一个关键词,花最少的钱买到真正的好酸奶...

    昨天在直播的时候,很多网友提到了酸奶.相对于牛奶平淡无奇的口味,家里的老人和孩子们也更喜欢酸奶的口感,酸酸甜甜的味道也更人喜欢.只不过在购买酸奶的时候,有时候虽然钱花了不少,但是买回家的酸奶却并非真正 ...

  8. 花最少的钱,训超6的机器人:谷歌大脑推出机器人强化学习平台,硬件代码全开源...

    鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 想要在现实世界的机器人身上探索强化学习(RL),并非易事. 首先,你得拥有类似这样的机器人平台: 而像这样的一只PR2,售价高达40万美元( ...

  9. 谷歌大脑推出机器人强化学习平台,硬件代码全开源,花最少的钱,训超6的机器人...

    点击我爱计算机视觉标星,更快获取CVML新技术 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 想要在现实世界的机器人身上探索强化学习(RL),并非易事. 首先,你得拥有类似这样的机器人平 ...

最新文章

  1. 查看TensorFlow的版本和路径
  2. Python装饰器 计时器记录方法执行性能
  3. vijos p1347(最大乘积(整数划分?))(25—100分)
  4. 深入了解React组件重新渲染的条件和生命周期
  5. activiti 7中文文档_Python3.7中文官方文档来袭...
  6. [CODEVS3641]上帝选人
  7. android 应用升级sdk版本号,Bugly Android 应用升级 SDK 常见问题
  8. JSP技术之JavaBean
  9. 无可用源 没有为任何调用堆栈加载任何符号_面试官问我JVM类加载,我笑了
  10. 金山毒霸2006真正升级第4版--目前最完美版本!
  11. 《 浩海技术 Ghost XP SP3 快速装机版 V14.0 》 世界杯特别纪念版
  12. 帝国CMS文章内容超级伪静态 去除栏目id 以自定义英文名称和ID组成
  13. 华为外包数据库面试问题分享20211225
  14. 关系型数据库基础概念:MySQL系列之开篇
  15. 求义隆单片机c语言红外解码程序,吐槽义隆单片机,顺便送上超轻红外解码程序....
  16. Vue中使用Ckplayer播放器
  17. kafka sasl java_Kafka 集群配置SASL+ACL
  18. Tesla_T4加速卡详细参数
  19. [答疑]工程管理组织的业务用例图
  20. 【STM8】两个单片机之间的Lora通讯实验

热门文章

  1. 请问自学Python有必要买课程吗?
  2. 01背包问题动态规划-atao
  3. javascript方法中new方式和字面量方式的区别
  4. 项目笔记8(尚品汇)
  5. Cordova插件使用和开发学习笔记
  6. “看不见的眼睛”——电脑监控软件能做什么?
  7. 互金暗战假新闻泛滥 谁是10G“裸条”泄露背后推手?
  8. ACM-ICPC 2018 北京网络赛:K-Dimensional Foil II
  9. 解决eclipse工程属性没有Project Facets选项
  10. 黑猴子的家:Redis 薪火相传