POJ 1010 - STAMPS + Python(DFS*)重做

博客作者重新解决了POJ 1010邮票问题,采用DFS方法,并强调了编程思路的变化。文章介绍了问题描述、解题策略,包括将输入转化为矩阵,以及多种终止条件。最后,提供了代码实现。
摘要由CSDN通过智能技术生成

说明:第一版见:POJ 1010 - STAMPS + Python(DFS*)_xxdragon126的博客-CSDN博客

原题链接:1010 -- STAMPS

为了巩固该题目,现对其重做;重做之后发现,编程思想与之前有所不同。看来,在经过了一段刷题训练之后,编程逻辑也发生了变化。此方案是原方案的简化版。

一 问题描述

集邮者到邮局购买指定总额的邮票,银行根据总额需求,以实际库存派发邮票,并且一次最多派发4张。

邮票库存示例如下:

示例1:1 2 3;说名有三种邮票类型,其面值分别为1 2 3;每类最多4张

示例2: 1 1 ;说明有两种邮票类型,其面值均为1,;每类最多4张

输出:输出满足客户需求总额的邮票集合(输出格式:客户需求总额 (邮票种类):各张的面值)

关于输出方案的要求:

1 首先,邮票种类最多优先

2 其次,邮票张数最少优先

3 最后,最大面值更大者优先

4 否则,保存多套方案。

二 解题思路:

1. 将输入数据转化成矩阵:各行分别表示不同类别的邮票,每行共4个等值元素,该元素大小即为当前邮票的面值。因此,即使两张邮票面值相同时,而其行号不同,仍能够区分二者属于不同类别的邮票。

2. 一些终止原则

2.1 ## 如果可行方案中存在超过两个,则直接返回

2.2 ###当前待确定的方案超过四个元素,直接返回

2.3 # 当前待确定的方案等于四个元素,但部分和不等于目标总额,直接返回

2.4 # 当前待确定的方案部分和大于目标总额,则直接返回

三 代码实现

# https://blog.csdn.net/baoqiaoben/article/details/79844831
# https://exp-blog.com/algorithm/poj/poj1010-stamps/

# 20211227 重新写

import collections
#1 将数据转化为矩阵,获得矩阵元素索引
def sub2Dict(subData):
    ##
    n = len(subData)
    matric = []
    for i in range(n):
        temp = subData[i]
        ma
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值