【Uva 242】Stamps and Envelope Size
【Link】:
【Description】
给你n个集合;
每个集合都包含一些不同面额的邮票;
(每种邮票都当做有无限张)
然后给你一封信上最多能贴的邮票张数S;
问你,哪一个集合的邮票;
能够贴出来从1开始的,最大的连续邮票面额
优先输出小的集合,集合大小一样的话,从大到小排序后,字典序小的优先输出;
【Solution】
每个邮票都是一个物品;
假设每个邮票都最多能拿S个;
做一个多重背包即可
这里
设f[i][j]表示前i个邮票,邮票的总面额为j的情况最少需要的邮票张数;
对每个集合都做一个这样的多重背包;
然后根据f[n][]获取每个集合能获得的最大连续面额就好了;
(根据f[n][j]是否小于等于s判断能不能获得这个面额)
最后输出,是按照场宽输出。不然会PE
【NumberOf WA】
2
【Reviw】
背包的变形。
背包可以做很多事情.嗯。。
【Code】
#include <bits/stdc++.h>
using namespace std;
const int NN = 10;
const int S = 10;
const int MAX_SIZE = 1000;
const int INF = 0x3f3f3f3f;
int s,N,num[S+5],f[NN+5][MAX_SIZE+5];
vector <int> v[NN+5];
int get_ans(int idx,int n){
memset(f,INF,sizeof f);
f[0][0] = 0;
for (int i = 0;i <= n-1;i++)
for (int j = 0;j <= MAX_SIZE;j++)
if (f[i][j]<INF){
for (int k = 0;k <= s;k++){
int temp = j + k*v[idx][i+1];
f[i+1][temp] = min(f[i+1][temp],f[i][j]+k);
}
}
for (int i = 0;i <= MAX_SIZE+1;i++)
if (f[n][i] > s) return i-1;
return 520;
}
int cmp(int idx1,int idx2){
for (int i = num[idx1];i >= 1;i--)
for (int j = num[idx2];j >= 1;j--)
if (v[idx1][i]!=v[idx2][j]){
if (v[idx1][i] < v[idx2][j])
return 1;
else
return 0;
}
return 1;
}
int main(){
//freopen("F:\\rush.txt","r",stdin);
for (int i = 1;i <= 10;i++)
v[i].resize(11);
while (~scanf("%d",&s) && s){
scanf("%d",&N);
int ma = 0,maxid = 1;
for (int i = 1;i <= N;i++){
scanf("%d",&num[i]);
for (int j = 1;j <= num[i];j++)
scanf("%d",&v[i][j]);
int temp1 = get_ans(i,num[i]);
if (temp1 > ma){
ma = temp1;
maxid = i;
}else if (temp1 == ma){
if (num[i] < num[maxid]){
maxid = i;
}else if (num[i] == num[maxid]){
if (cmp(i,maxid) == 1)
maxid = i;
}
}
}
printf("max coverage =%4d :",ma);
for (int j = 1;j <= num[maxid];j++)
printf("%3d",v[maxid][j]);
puts("");
}
return 0;
}
【Uva 242】Stamps and Envelope Size的更多相关文章
- 【UOJ#242】【UR#16】破坏蛋糕(计算几何)
[UOJ#242][UR#16]破坏蛋糕(计算几何) 题面 UOJ 题解 为了方便,我们假定最后一条直线是从上往下穿过来的,比如说把它当成坐标系的\(y\)轴. 于是我们可以处理出所有交点,然后把它们 ...
- 【UVA 437】The Tower of Babylon(记忆化搜索写法)
[题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 【巧妙算法系列】【Uva 11464】 - Even Parity 偶数矩阵
偶数矩阵(Even Parity, UVa 11464) 给你一个n×n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上.下.左.右的元素(如果存在的话)之和均为偶数.比 ...
- 【贪心+中位数】【UVa 11300】 分金币
(解方程建模+中位数求最短累积位移) 分金币(Spreading the Wealth, UVa 11300) 圆桌旁坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一 ...
- 【UVa 10881】Piotr's Ants
Piotr's Ants Porsition:Uva 10881 白书P9 中文改编题:[T^T][FJUT]第二届新生赛真S题地震了 "One thing is for certain: ...
- 【UVa 116】Unidirectional TSP
[Link]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 【UVa 1347】Tour
[Link]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 【uva 1025】A Spy in the Metro
[题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 【Uva 1630】Folding
[Link]: [Description] 你能对字符串进行压缩的操作; 即把连续出现的相同的子串改成它出现的次数+这个最基本的字符串的形式; 问你这个字符串最短能被压缩得多短; [Solution] ...
随机推荐
- 足球大数据:致足球怀疑论者-The Counter(s)-Reformation反教条改革
足球大数据:致足球怀疑论者-The Counter(s)-Reformation反教条改革 注:本序列文章都是本人对<The Numbers Game>书(豆瓣链接http://book. ...
- C++开发人脸性别识别教程(3)——OpenCv配置和ImageWatch插件介绍
OpenCv是C++图像处理的重要工具.这个人脸性别识别的项目就是借助OpenCv进行开发的. 尽管网上已经有了非常多关于OpenCv的配置教程,但出于教程完整性考虑.这里还是用专门的一篇博客来介绍O ...
- UNIX环境高级编程之第4章:文件和文件夹-习题
4.1 stat函数是尾随符号链接的,所以用stat替换lstat不会显示符号链接的信息 4.2 在一个目录下先再shell中输入umask shell进程再进行创建文件的操作.其权限抖都会被屏蔽 4 ...
- bzoj3931: [CQOI2015]网络吞吐量(spfa+网络流)
3931: [CQOI2015]网络吞吐量 题目:传送门 题解: 现在有点难受....跳了一个多钟...菜啊... 题意都把做法一起给了....最短路+网路流啊. 不想说话...记得开long lon ...
- Eval函数知识总结
说道Json,我们先来聊聊eval 一.eval是什么?(解析器) eval是一个函数,看本质function eval() { [native code] } 二.怎样使用eval? 语法:str ...
- 28.STL常用算法
#include <algorithm> 算法 常用版本 描述 返回Type std::find() find(_InIt _Fisrt,_InIt _Last, _Ty& _Va ...
- Cordova Android项目如何做代码混淆
我想修改build.gradle配置 可是这个文件明确写了// GENERATED FILE! DO NOT EDIT!可是还是试了试: if (cdvReleaseSigningProperties ...
- 为一个支持GPRS的硬件设备搭建一台高并发服务器用什么开发比较容易?
高并发服务器开发,硬件socket发送数据至服务器,服务器对数据进行判断,需要实现心跳以保持长连接. 同时还要接收另外一台服务器的消支付成功消息,接收到消息后控制硬件执行操作. 查了一些资料,java ...
- Spring:dispatchservlet
DispatcherServlet 是 Spring MVC 中负责请求调度的核心引擎,所有的请求将由此 Servlet 根据配置分发至各个逻辑处理单元.其内部同时也维护了一个ApplicationC ...
- Linux Putty 复制粘贴
从putty复制: 用左键选中文字,再其他地方点中键就可以粘贴了,不需要右键粘贴. 在putty中粘贴: 在其他地方用左键选中文字,不用右键复制,保持选中文字高亮,然后在putty中点中键 ...