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没有初始化( ...
随机推荐
- 201521123096《Java程序设计》第三周学习总结
1. 本周学习总结 2. 书面作业 (1)代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
- 201521123092《java程序设计》第三周学习总结
#1. 本章学习总结 你对于本章知识的学习总结 #2. 书面作业 **Q1. 代码阅读 public class Test1 { private int i = 1;//这行不能修改 private ...
- 201521123023《Java程序设计》第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. (1)File可以表示一个特定文件的名称,也能表示一个目录下的一组文件的名称. (2)继承自InputStre ...
- Java+大数据开发——HDFS详解
1. HDFS 介绍 • 什么是HDFS 首先,它是一个文件系统,用于存储文件,通过统一的命名空间--目录树来定位文件. 其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角 ...
- YYHS-Floor it
题目描述 输入 输出 样例输入 5 97 样例输出 11 提示 题解 先不管p,通过列举前面几项,不难发现当i为偶数时,a[i]=a[i-1]+a[i-2],当i为奇数时,a[i]=a[i ...
- java通过JDBC链接SQLServer2012【转载!!!超详细】
http://blog.csdn.net/stewen_001/article/details/19553173/
- Spring-java-模板设计模式
1,模板设计模式指的是将相应的模板方法提取出来在专门的位置定义,然后把相同调用过程操作,通过模板来实现对于模板设计模式而言,一般有两种实现方式 1)基于继承的实现 2)基于组合的实现 Spring的J ...
- java-annotation的简单介绍
package com.yangwei.shop.entity; /** * annotation作用 一是进行标识,二是进行约束 * *///必须让它在运行时能够执行@Retention(Reten ...
- 个人理解---在开发中何时加入日志记录功能[java]
是这样的:俩个月前做的一个小功能,今天经理突然问我这个'清除复投记录'功能是不是我做的,我说是,很久以前了.他说昨天一个客户找过来了,后台把人家的复投记录清除掉了,不知道何时清除的,我记得当时做的时候 ...
- KMP算法的来龙去脉
1. 引言 字符串匹配是极为常见的一种模式匹配.简单地说,就是判断主串TT中是否出现该模式串PP,即PP为TT的子串.特别地,定义主串为T[0-n−1]T[0-n−1],模式串为P[0-p−1]P[0 ...