POJ 1010 - STAMPS + Python(DFS*)

题目链接:

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

改进版见:POJ 1010 - STAMPS + Python(DFS*)重做_xxdragon126的博客-CSDN博客

这道题目做了很久,需要注意的是:

1 dfs的递归过程中,当使用队列、字典传递参数时,队列、字典一经变化,其值将不再恢复。处理措施,将其值依次取出后,用for循环赋值给一个新的队列或者字典变量;

2 dfs的递归过程中,将队列或者字典直接赋值给其他变量后,当原队列或者字典发生改变时,被赋值的变量的值也将随之改变。处理措施,依次取出队列或者字典(包括其键值)的值,用for循环赋值给新变量。

3 经过上述处理之后,可保证在递归返回时,字典或队列能够实现数值复原;否则,将异常麻烦。

4 其他一些处理技巧:

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

4.2 未进行特殊优化,而是用dfs全搜,搜索出所有可行的方案。后续,对各方案按照“字母升序”排序,然后根据“行号+面值”区分不同类别的邮票组合,用于剔除重复方案。具体实现见:BackAns(self,ways,dict)函数。

特别地:

        1 #需要使用pop()来获得set的元素,而不是用索引。

        2 #实现过程中,使用了众多字符串操作方法和设计。

二 代码实现

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

import collections

class Solution:
    def DFS(self,stamps_data):
        self.ways = [] #用来存储满足要求的方案
        # 考虑将给定邮票按行排成矩阵,各行分别不同种类的邮票(行号表示种类标记),每行包含4张相同的邮票(列号表示同类邮票的数量)
        self.stamps_dict,self.stamps_matrix = self.ToCors(stamps_data)
        # 接下来,查找方案
        # 设置第一个节点
        s = "0;0"
        self.dfs(s,self.stamps_dict,0,[]);
        # 剔除重复方案,获得输出结果
        ans = self.BackAns(self.ways,self.stamp
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值