https://vjudge.net/problem/UVA-242

题意:

输入s(每个信封能粘贴的最多邮票数量)和若干邮票组合,选出最大连续邮资最大的一个组合(最大连续邮资也就是用s张以内的邮票来凑1,2,3,4...n,如果无法凑成n+1,那么最大值也就是n了)。如果有多个最大值,则优先考虑邮票数少的,其次考虑邮票面值最大的那个更小的。

思路:

完全背包问题。

完全背包是物品无限,在这里和题意相符合,每种邮票也是可以无限使用的。最大连续邮资就相当于一个背包容量,d[i]表示当最大连续邮资为i时所需要的最少的邮票数量,如果d[i]>s,说明 i 是无法凑成的,最大连续邮资也就是 i-1 了

 #include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn = ;
const int INF = 0x3f3f3f3f; int s, n, m;
int a[maxn];
int dp[];
int ans[]; int main()
{
//freopen("D:\\txt.txt", "r", stdin);
while (cin >> s && s)
{
int best = ; //最大连续邮资
int Max=INF; //最大邮票的值
int number = INF; //邮票数量
cin >> n;
for (int i = ; i < n; i++)
{
cin >> a[];
for (int j = ; j <= a[]; j++)
cin >> a[j];
memset(dp, INF, sizeof(dp));
dp[] = ;
int now = ;
for (int j = ; j <= s*a[a[]]+; j++)
{
for (int k = ; k <= a[] && j >= a[k]; k++)
dp[j] = min(dp[j], dp[j - a[k]] + );
if (dp[j]>s)
{
now = j - ;
break;
}
}
if (now > best) //此时的最大连续邮资大于了之前的
{
best = now;
number = a[];
Max = a[a[]];
memcpy(ans, a, sizeof(a));
}
else if (now == best) //如果相等时
{
if (a[] < number) //首先考虑邮票数量少的
{
number = a[];
Max = a[a[]];
memcpy(ans, a, sizeof(a));
}
else if (a[a[]] < Max) //如果邮票数量一样多,则优先考虑邮票最大的那张更小的
{
Max = a[a[]];
memcpy(ans, a, sizeof(a));
}
}
}
printf("max coverage =%4d :", best);
for (int i = ; i <= number; i++)printf("%3d", ans[i]);
puts("");
}
return ;
}

UVa 242 邮票和信封(完全背包)的更多相关文章

  1. Uva 242 邮票和信封

    题目链接:https://vjudge.net/contest/146179#problem/D 题意: 信封上最多贴S张邮票.有N个邮票集合,每个集合有不同的面值.问哪个集合的最大连续邮资最大,输出 ...

  2. LRJ入门经典-0905邮票和信封305

    原题 LRJ入门经典-0905邮票和信封305 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 假定一张信封最多贴5张邮票,如 ...

  3. UVa 242 Stamps and Envelope Size (无限背包,DP)

    题意:信封上最多贴S张邮票.有N个邮票集合,每个集合有不同的面值.问哪个集合的最大连续邮资最 大,输出最大连续邮资和集合元素. 最大连续邮资是用S张以内邮票面值凑1,2,3...到n+1凑不出来了,最 ...

  4. UVA - 242 Stamps and Envelope Size (完全背包+bitset)

    题意:给你一些邮票面值的集合,让你选择其中一个集合,使得“能用不超过n枚集合中的邮票凑成的面值集合S中从1开始的最大连续面值”(即mex(S)-1)最大.如果有多解,输出集合大小最小的一个:如果仍有多 ...

  5. P2725 邮票 Stamps(完全背包+限制填充数)

    题目链接:https://www.luogu.org/problem/show?pid=2725 题目大意:给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 ...

  6. uva 242

    242 - Stamps and Envelope Size Time limit: 3.000 seconds  Stamps and Envelope Size  Philatelists hav ...

  7. UVA.674 Coin Change (DP 完全背包)

    UVA.674 Coin Change (DP) 题意分析 有5种硬币, 面值分别为1.5.10.25.50,现在给出金额,问可以用多少种方式组成该面值. 每种硬币的数量是无限的.典型完全背包. 状态 ...

  8. 【Uva 242】Stamps and Envelope Size

    [Link]: [Description] 给你n个集合; 每个集合都包含一些不同面额的邮票; (每种邮票都当做有无限张) 然后给你一封信上最多能贴的邮票张数S; 问你,哪一个集合的邮票; 能够贴出来 ...

  9. UVA 562 Dividing coins (01背包)

    题意:给你n个硬币,和n个硬币的面值.要求尽可能地平均分配成A,B两份,使得A,B之间的差最小,输出其绝对值.思路:将n个硬币的总价值累加得到sum,   A,B其中必有一人获得的钱小于等于sum/2 ...

随机推荐

  1. vertx连接mysql数据库

    1:创建一个verticle组件 package jdbcConnection; import io.vertx.core.AbstractVerticle; import io.vertx.core ...

  2. Apache 配置多个HTTPS站点

    作中经常会遇到多个站点实现https访问,并指向同一个网页,本文将详解如何在Centos 环境下配置Apache多站点实现HTTPS访问. 准备工作 OS:CentOS release 6.8 (Fi ...

  3. Apache下设置网站目录的访问权限

    禁止用户对某一个目录及目录下文件的访问,仅允许本地访问 <Directory "/wwwroot/cert/"> Require local </Director ...

  4. nltk模块基础操作

     几个基础函数 (1)搜索文本:text.concordance(word) 例如,在text1中搜索词”is”在文本中出现的次数以及上下文的词:text1.concordance("is& ...

  5. Floyd 判圈算法

    Floyd 判圈算法 摘自维基百科, LeetCode 上 141题 Linked List Cycle 用到这个, 觉得很有意思. 记录一下. 链接: https://zh.wikipedia.or ...

  6. os模块的使用

    python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关.以下列举常用的命令 1. os.name()——判断现在正在实用的平台,Window ...

  7. 11.2.0.4 RAC测试环境修改时区

    当前问题: 系统时区修改后,集群数据库各个日志发现显示的还是之前时区的时间. 依据Linux (RHEL)修改时区更改了系统的时区后,集群数据库的各个日志还是显示之前的时区时间. 查找MOS资料 Ho ...

  8. html lang属性

    HTML 的 lang 属性可用于网页或部分网页的语言.这对搜索引擎和浏览器是有帮助的. 根据 W3C 推荐标准,您应该通过 <html> 标签中的 lang 属性对每张页面中的主要语言进 ...

  9. SQL 中【NULL】和【无】烦躁的问题

    很烦躁,烦躁的很,总结一下. 先简单的说下: NULL   : 不确定的东西 无       :没有东西 复杂的见下文....... 一 .null值 下面举个最简单的例子,平常工作当中肯定比这个sq ...

  10. POJ 1836

    刚开始二分写错了 wa了很久 这个二分 的好好想想 #include <iostream> #include<cstdio> #include<string.h> ...