UVa #242 Stamps and Envelope Size (习题9-5)

博客介绍了如何使用动态规划解决UVA #242习题,即通过邮票组合找寻最小邮票数量。内容强调了问题的暴力求解方法和友好的数据规模,同时提到了输出格式的重要性,因为这是导致许多部分错误(PE)的原因。运行时间为0.029秒。
摘要由CSDN通过智能技术生成

这动态规划简直就是个暴力法。另外这数据规模也太友善了


我的做法是设 dp(i,j) 为用第 i 套邮票拼凑出 j 分钱所需要的邮票数量,递推+刷表法。遇到dp值大于S或未定义的,则可以确定此套邮票最大coverage为 j-1


要留意下output格式,在题目中没说,但是在sample output中能看出来制表的痕迹。这道题惨淡的数据、大量的PE估计很多都来源于此。


Run TIme: 0.029s

#define UVa  "9-5.242.cpp"      //Stamps and Envelope Size

#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

//Global Variables.
const int maxn = 10 + 5, maxcover = 1000 + 5, INF = 1<<30;
int S, N, coverage[maxn], C[maxn];      //C[i]: size of denomination i.
int denominations[maxn][maxn];
int d[maxn][maxcover];


int smaller(int a, int b) {
    if(C[a] != C[b]) return C[a] < C[b];
    for(int i = C[a] - 1; i >= 0; i --)
        if(denominations[a][i] != denominations[b][i])
            return denominations[a][i] < denominations[b][
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值