题目链接:https://vjudge.net/contest/146179#problem/D

题意:

信封上最多贴S张邮票。有N个邮票集合,每个集合有不同的面值。问哪个集合的最大连续邮资最大,输出最大连续邮资和集合元素。最大连续邮资是用S张以内邮票面值凑1,2,3...到n+1凑不出来了,最大连续邮资就是n。如果不止一个集合结果相同,输出集合元素少的,如果仍相同,输出最大面值小的。

这个题意,刘汝佳的书上输出刚好写反。

分析:

先看一组数据。求最大连续邮资,那我想用二分啊,看这个答案是不是符合的,其实,在求这个答案是不是符合的,会重复计算,还不如按顺序计算。

这个从1开始算,算到某一个数,他的最少票数>s,就达到要求的了。那么这就是一个无穷背包问题了。

 #include <bits/stdc++.h>

 using namespace std;

 const int maxn = ;
int a[maxn][maxn];
int s,n;
int dp[];
int ans[]; const int INF = 0x3f3f3f3f; int main()
{
while(scanf("%d",&s),s)
{
scanf("%d",&n);
for(int i=; i<n; i++)
{
scanf("%d",&a[i][]);
for(int j=; j<=a[i][]; j++)
scanf("%d",&a[i][j]); memset(dp,INF,sizeof(dp));
dp[] = ;
for(int j=; j<; j++)
{
for(int k=; k<=a[i][]&&j-a[i][k]>=; k++)
{
dp[j] = min(dp[j],dp[j-a[i][k]]+);
}
if(dp[j]>s)
{
ans[i] = j-;
break;
}
}
} int anss = -,cnt = ;
for(int i=; i<n; i++)
{
if(ans[i]>anss)
{
anss = ans[i];
cnt = i;
}
else if(ans[i]==anss&&a[i][]<a[cnt][]) cnt = i; //票数最少
else if(ans[i]==anss&&a[i][]==a[cnt][])
{
bool ok = false;
for(int j=a[i][]; j>=; j--)
{
if(a[i][j]<a[cnt][j])
{
ok = true;
break;
}
else if(a[i][j]>a[cnt][j]) break;
}
if(ok) cnt = i;
}
}
printf("max coverage =%4d :",anss);
for(int i=; i<=a[cnt][]; i++)
printf("%3d",a[cnt][i]);
puts("");
}
return ;
}

Uva 242 邮票和信封的更多相关文章

  1. UVa 242 邮票和信封(完全背包)

    https://vjudge.net/problem/UVA-242 题意: 输入s(每个信封能粘贴的最多邮票数量)和若干邮票组合,选出最大连续邮资最大的一个组合(最大连续邮资也就是用s张以内的邮票来 ...

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

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

  3. uva 242

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

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

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

  5. UVA - 242 线性DP

    题意:给定多种邮票的组合,邮票最多只能用S张,这些邮票能组成许多不同面额,问最大连续面额的长度是多少,如果有多个组合输出组合中邮票数量最少的,如果仍有长度一致的,输出邮票从大到小排序后字典序最大的那个 ...

  6. 习题9-5 UVA 242

    Stamps and Enovelope Size 题意: 给你最多贴S张邮票.有N个邮票集合,每个集合有不同的面值.问哪个集合的最大连续邮资最大,输出最大连续邮资和集合元素. 如果不止一个集合结果相 ...

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

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

  8. Stamps ans Envelope Sive UVA - 242

    ( ||{集合x}表示x中元素1||x中元素2||...||x的最后一个元素||(a,b)表示a||b) ans[i][j][k]表示考虑前i种邮票时取j个邮票能否得到面值kans[i][j][k]= ...

  9. 【Uva 242】Stamps and Envelope Size

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

随机推荐

  1. 数字和为sum的方法数

    [编程题] 数字和为sum的方法数 给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数. 当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案. 输入描 ...

  2. Java线程:线程的同步-同步方法

    Java线程:线程的同步-同步方法   线程的同步是保证多线程安全访问竞争资源的一种手段. 线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源.什么时候需要考虑同步,怎么同步等等问 ...

  3. 判断ecshop未付款添加去付款按钮

    判断ecshop未付款添加去付款按钮,打开ecshop模板目录下user_transaction.dwt找到{$item.handler} 这个变量 给它下面添加以下代码 {if $item.pay_ ...

  4. 动画黄金搭档:CADisplayLink&CAShapeLayer

    我们在开发中有时会遇到一些看似非常复杂的动画,不知该如何下手,今天的这篇文章中我会讲到如何利用CADisplayLink和CAShapeLayer来构建一些复杂的动画,希望能在你下次构建动画中,给你一 ...

  5. C#实现XML与DataTable互转

    private string ConvertDataTableToXML(DataTable xmlDS) { MemoryStream stream = null; XmlTextWriter wr ...

  6. Thinkstation center M8600t装RHEL7不能联网,网卡驱动没装问题

    Thinkstation center M8600t装RHEL7时不能联网,配置ip也不可以,后来发现网卡驱动没有安装.可以通过装网卡驱动的方式解决问题,解决方法如下: root登录 lspci |  ...

  7. Liunx下的系统负荷

                uptime命令回显中的load average所表示的意思和w命令相似,都是表示过去的1分钟.5分钟和15分钟内进程队列中的平均进程数量. 这里需要注意的是load aver ...

  8. Redis与Memcache的区别

    Redis与Memcache的区别 数据类型:  redis数据类型丰富,支持set liset等类型          memcache支持简单数据类型,需要客户端自己处理复杂对象 持久性: red ...

  9. C与C++中的常用提高程序效率的方法

    1.用a++和++a及a+=1代替a=a+1,用a--和--a及a-=1代替a=a-1 通常使用若把一个函数定义为内联函数,则在程序编译阶段,编译器就会把每次调用该函数的地方都直接替换为该函数体中的代 ...

  10. 我的第二个FluentNHibernate例子with Knockout

    在上一篇我的第一个FluentNHibernate例子的基础上,我们用上knockoutjs 1用nuget添加knockoutjs包 2用nuget添加json.net包 3..在Index.csh ...