输入输出:

id=26127" style="color:blue; text-decoration:none">Sample
Input

5
2
4 1 4 12 21
4 1 5 12 28
10
2
5 1 7 16 31 88
5 1 15 52 67 99
6
2
3 1 5 8
4 1 5 7 8
0

id=26127" style="color:blue; text-decoration:none">Sample
Output

max coverage =  71 :  1  4 12 21
max coverage = 409 : 1 7 16 31 88
max coverage = 48 : 1 5 7 8

题意:

最多用S个邮票拼出最大连续数值,每组共同拥有N组例子,每组第一个是数组元素个数,输出字典序最小的一组。

用二维的状态事实上就能够了,i,j,k分别表示取到数组前i位用j个邮票能否拼出k,感觉有点像背包,输入并不都是排好序的,须要排序。

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
#include<cstring>
#include<vector>
#include<algorithm>
#define INF 0X3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std; typedef long long ll;
typedef unsigned long long llu;
const int maxd=10+5;
int n,s;
vector<int> st[maxd];
int dp[maxd][1005]; bool ok(int x)
{
for(int j=0; j<=s; ++j)
if(dp[j][x])
return true;
return false;
} bool cmp(const vector<int> &a ,const vector<int> &b)
{
int lena=a.size(),lenb=b.size();
if(lena==lenb)
for(int i=lena-1;i>=0;--i)
if(a[i]!=b[i]) return a[i]<b[i];
return lena<lenb;
} int solve(int x)
{
mem(dp,0); int len=st[x].size();
int c=st[x][len-1]*s; for(int j=0; j<=s; ++j) dp[j][0]=1;
// for(int i=0; i<=len; ++i) dp[i][0][0]=1; for(int i=1; i<=len; ++i)
{
// memcpy(dp[i],dp[i-1],sizeof(dp[i]));
for(int j=1; j<=s; ++j)
{
int w=j*st[x][i-1]; for(int m=j; m<=s; ++m)
for(int k=w; k<=c; ++k)
if(dp[m-j][k-w])
dp[m][k]=1;
}
} int ans=0;
for(int i=1; i<=c; ++i)
{
if(ok(i)) ans=i;
else break;
} return ans; } int main()
{
freopen("1.txt","r",stdin);
while(scanf("%d",&s)==1 && s)
{
scanf("%d",&n);
for(int i=0; i<n; ++i)
{
int x,tmp;
st[i].clear();
scanf("%d",&x);
for(int j=0; j<x; ++j)
scanf("%d",&tmp),st[i].push_back(tmp);
sort(st[i].begin(),st[i].end());
}
sort(st,st+n,cmp); int ans=0,pos=-1;
for(int i=0; i<n; ++i)
{
int tmp=solve(i);
// cout<<tmp<<endl;
if(tmp>ans)
{
ans=tmp;
pos=i;
}
} printf("max coverage =%4d :",ans);
for(int i=0; i<st[pos].size(); ++i)
printf("%3d",st[pos][i]);
printf("\n");
}
return 0;
}

uva--242(邮资问题 dp)的更多相关文章

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

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

  2. uva 10817(数位dp)

    uva 10817(数位dp) 某校有m个教师和n个求职者,需讲授s个课程(1<=s<=8, 1<=m<=20, 1<=n<=100).已知每人的工资c(10000 ...

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

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

  4. UVA - 242 线性DP

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

  5. uva 242

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

  6. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  7. Uva 242 邮票和信封

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

  8. uva 10453 - Make Palindrome(dp)

    题目链接:10453 - Make Palindrome 题目大意:给出一个字符串,通过插入字符使得原字符串变成一个回文串,要求插入的字符个数最小,并且输出最后生成的回文串. 解题思路:和uva 10 ...

  9. uva 10671 - Grid Speed(dp)

    题目链接:uva 10671 - Grid Speed 题目大意:给出N,表示在一个N*N的网格中,每段路长L,如今给出h,v的限制速度,以及起始位置sx,sy,终止位置ex,ey,时间范围st,et ...

  10. uva 1331 - Minimax Triangulation(dp)

    option=com_onlinejudge&Itemid=8&page=show_problem&category=514&problem=4077&mosm ...

随机推荐

  1. touch 命令(转)

    原文:http://www.cnblogs.com/peida/archive/2012/10/30/2745714.html linux的touch命令不常用,一般在使用make的时候可能会用到,用 ...

  2. JDBC四(web基础学习笔记十)

    一.增加 .修改.删除.查询 将功能整合在一个类中 package pb.base; import java.sql.Connection; import java.sql.DriverManager ...

  3. 从零开始学JavaScript二(基本概念)

    基本概念 一.区分大小写 在ECMAScript中的一切(变量.函数名.操作符)都是区分大小写的. 如变量名test和Test分别表示两个不同的变量, 二.标识符 所谓标识符,就是指变量.函数.属性的 ...

  4. 一些面试基本知识(Android篇一)

    Android Activity设计模式之MVC模式(介绍MVP之前的引子) 參考博客.文章 http://www.cnblogs.com/liqw/p/4175325.html MVC即Model- ...

  5. 使用loadrunner对https协议(单双向SSL)的web端性能测试 (转)

    1.项目背景 1.1 单双向SSL的含义及部署 单向SSL即我们说到的https协议. 特点是,浏览器需要请求验证服务器证书: 基本含义是:一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务 ...

  6. 在启动vsftpd,有时会报错

    在启动vsftpd,有时会报错:C:>ftp 192.168.0.101Connected to 192.168.0.101.220 (vsFTPd 2.0.5)User (192.168.0. ...

  7. 关于多线程中使用ArrayList的问题

    多线程全局变量:1.定义只读的全局变量时,必须加final修饰,即使是private的,防止被反射修改.2.对于需要多次读写的全局变量,一定要用ThreadLocal封装,避免多线程并发时变量被多次赋 ...

  8. zabbix对数据盘磁盘容量进行监控

    示例将数据盘挂载到 /mnt目录 , 对 /mnt目录进程容量监控 item 添加对 /mnt 目录的监控项 tragger 添加触发项 这样完成对一个数据盘磁盘容量的监控

  9. Mac环境 MySQL 和 MySQLWorkBench 破解版百度云下载

    最近有小伙伴下载,我正好保存有 正好分享一下 下载路径: Max环境下下载安装 1.下载完直接安装 MySQL安装后,这里可以查看 2.MySQLWorkBench安装完,桌面会有图标 打开后,用lo ...

  10. SpringBoot定时器

    使用Component注解注解一个类,这个类就变成了一个组件.组件可以有很多不同的特性,比如Scheduled注解为组件的某个函数添加了定时的特性. @Component public class M ...