uva242,Stamps and Envelope Size
这题紫薯上翻译错了
应该是:如果有多个并列,输出邮票种类最少的那个,如果还有并列,输出最大面值最小的那个
坑了我一个下午
dp[p][q]==1表示可以用不超过q张组成面额p
结合记忆化,p从1开始枚举,一直枚举找到dp[p][q]=0的时候就可以了
这题应该归类成一种背包吧
注意dp初始化的时候应该初始化为-1(我就因为粗心,tle好久)
最后输出的时候比较恶心
最终的修改后的代码
实验证明,先读入所有数据后再处理比边读数据边处理要快
/*
* Author: Bingo
* Created Time: 2015/3/4 13:54:40
* File Name: uva242.cpp
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <time.h>
using namespace std;
const int maxint = ;
int S,T,n;
int map[][];
int dp[][];
//int ans[20][20];
int ans,ans_num,ans_max,ans_case;
int fun(int p,int q,int c){
if (dp[p][q]!=-) return dp[p][q];
else if (p==){
dp[p][q]=;
return ;
}else if (q==) {
dp[p][q]=;
return ;
}else {
for (int i=;i<=map[c][];i++) {
if (p>=map[c][i]&&fun(p-map[c][i],q-,c)){
dp[p][q]=;
return ;
}
}
}
dp[p][q]=;
return ;
}
int cmp(int a,int b){//比较最大连续邮资相同的集合
if(map[a][]<map[b][])return a;
if(map[b][]<map[a][])return b;
for(int i=map[a][];i>;i--){
if(map[a][i]<map[b][i])return a;
if(map[b][i]<map[a][i])return b;
}
return a;
}
int main(){
while (cin>>S&&S){
cin>>T;
int mycase=;
ans=;ans_num=maxint;ans_max=maxint;
while (T--){
cin>>n;
mycase++;
memset(dp,-,sizeof(dp));
map[mycase][]=n;
for (int i=;i<=n;i++) {
cin>>map[mycase][i];
}
int p;
for (p=;;p++) {
if (fun(p,S,mycase)==) break;
}
int t=p-;
if (t>ans){
ans=t;
ans_case=mycase;
}else if (t==ans){
ans_case=cmp(mycase,ans_case);
}
}
printf("max coverage =%4d :", ans);
for(int i=;i<=map[ans_case][];i++){
printf("%3d",map[ans_case][i]);
}
printf("\n");
}
return ;
}
uva242,Stamps and Envelope Size的更多相关文章
- UVA-242 Stamps and Envelope Size (DP)
题目大意:给一些邮票的面值组合,找出在限定的张数范围内能组合出连续最大值得那个组合. 题目分析:状态可以这样定义:dp(k,u)表示u能否用k张邮票组合成.状态转移方程很显然了. 代码如下: # in ...
- UVa 242 Stamps and Envelope Size (无限背包,DP)
题意:信封上最多贴S张邮票.有N个邮票集合,每个集合有不同的面值.问哪个集合的最大连续邮资最 大,输出最大连续邮资和集合元素. 最大连续邮资是用S张以内邮票面值凑1,2,3...到n+1凑不出来了,最 ...
- UVA - 242 Stamps and Envelope Size (完全背包+bitset)
题意:给你一些邮票面值的集合,让你选择其中一个集合,使得“能用不超过n枚集合中的邮票凑成的面值集合S中从1开始的最大连续面值”(即mex(S)-1)最大.如果有多解,输出集合大小最小的一个:如果仍有多 ...
- Stamps and Envelope Size
题意: 容量为s的信封,给n组邮票的面值,求哪一组能组成的连续的面值的最大值最大,若有多组答案,输出面值数量最小的一组,若数量相等,输出最大面值最小的一组,若最大面值相等,输出第二大面值最小的一组,依 ...
- 【Uva 242】Stamps and Envelope Size
[Link]: [Description] 给你n个集合; 每个集合都包含一些不同面额的邮票; (每种邮票都当做有无限张) 然后给你一封信上最多能贴的邮票张数S; 问你,哪一个集合的邮票; 能够贴出来 ...
- length()方法,length属性和size()的方法的区别
length()方法,length属性和size()的方法的区别: length()方法是针对字符串来说的,要求一个字符串的长度就要用到它的length()方法: length属性是针对Java中的数 ...
- iPhone launch screen,self.view.frame.size
在工程文件中找到以下设置 "Launch Screen File"只支持iOS8以上版本,如果用之,则self.view.frame.size返回的结果为正常的当前view尺寸. ...
- [转]实例化SqlParameter时,如果是字符型,一定要指定size属性
转自:http://bbs.csdn.net/topics/380155255 以前在实例化SqlParameter时,通常都是用下面的语句,没有设置size属性: new SqlParameter( ...
- 为什么java里面经常作List判断的时候,既要判断list不为null,又要判断size>0呢?
没有考虑到具体的问题上面,我们单纯的来讲: 为什么java里面经常作List判断的时候,既要判断list不为null,又要判断size>0呢? list == null 说明list没有初始化( ...
随机推荐
- 201521123015 《Java程序设计》第3周学习总结
本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点. 书面作业 Q1.代码阅读 publi ...
- Java课程设计-定时器
Java课程设计--定时器 1.团队课程设计博客链接 团队博客地址 2.个人负责模块或任务说明 框架构建 时间设置面板,倒计时面板 按钮设置 3.自己的代码提交记录截图 4.自己负责模块或任务详细说明 ...
- 史上最全CentOS安装教程,图文结合
这是我最近整理的一份最全的CentOS安装步骤,亲自测试步骤,步步都有截图,步骤清晰.按此教程可轻松装机,并且安装成功的主机能访问外部网络. 闲话不说,首先介绍一下本教程用到工具: VMware Wo ...
- python 基础之字符编码和文件处理
一.字符编码 (1)计算机基础知识 (2)python 解释器执行py文件的原理 <1>python 解释器启动 <2>python解释器相当于一个文本编辑器,打开txt.py ...
- JSTL常用标签
JSTL标签常用:http://blog.csdn.net/imust_can/article/details/6965756
- spring的一些问题
1.什么是spring? spring是一个轻量级的一站式框架,它的核心有两个部分,1.aop面向切面编程 2.ioc控制反转. 2.什么是aop aop就是面向切面编程,使用aop可以使业务逻辑各个 ...
- stsuts2的一些问题
1.什么是struts2? struts2是一个基于MVC设计模式的框架, 2.struts2的工作原理. 1.客户端发送一个请求 2.经过核心过滤器StrutsPrepareAndExecuteFi ...
- 关于极光推送Jpush的demo
关于极光推送Jpush 推送是手机app必不可少的一样功能,这次由于公司项目需要研究了一下.由于推送一般写于服务端,所以对于不会Android的javaweb程序员要写出一个完整的demo是一件很头痛 ...
- GCD之并行串行区别
1.用户自定义线程队列,创建时很容易创建 注意创建时的第一个参数:标记值,方便调试查看 1 2 dispatch_queue_t serialqueue=dispatch_queue_create(& ...
- PyTorch教程之Neural Networks
我们可以通过torch.nn package构建神经网络. 现在我们已经了解了autograd,nn基于autograd来定义模型并对他们有所区分. 一个 nn.Module模块由如下部分构成:若干层 ...