原题

LRJ入门经典-0905邮票和信封305
难度级别:B; 运行时间限制:1000ms; 运行空间限制:256000KB; 代码长度限制:2000000B
试题描述

假定一张信封最多贴5张邮票,如果只能贴1分和3分的邮票,可以组成面值1-13以及15,但不能组成面值14。我们说:对于邮票组合{1,3}以及数量上限S=5,最大连续邮资为13。

输入S和若干邮票组合,选出最大连续邮资最大的一个组合。如果有多种并列,保证选出的组合中邮票张数最多。如果还有并列,保证最大的邮票面值尽可能小

输入
输入第一行包含一个正整数S(S<=10),表示邮票数量上限
第二行为一个正整数N(N<=10)
以下N行,每行代表一个邮票集合,第一个数表示集合中邮票的数量,后面从小到大依次表示每张邮票的面值(邮票面值不超过100)
输出
输出包括两行,第一行为最大连续邮资,第二行依次输出该连续邮资对应的邮票组合(多解时按照题目描述的要求输出最恰当的组合)
输入示例
5
2
4 1 4 12 21
4 1 5 12 28
输出示例
71
1 4 12 21

分析

代码

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct P
{
int s,x[110];
}a[11];
int dp[11][11000];
inline int minn(int xx,int yy)
{
for(int i=1;i<yy;i++)
for(int j=i;j<yy;j++)
if(i+j==yy && (dp[xx][i]+dp[xx][j])<dp[xx][yy]) dp[xx][yy]=dp[xx][i]+dp[xx][j];
}
int main()
{
int n,m,sum=0;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i].s;
for(int j=1;j<=a[i].s;j++)
{
cin>>a[i].x[j];
sum+=a[i].x[j]*n;
}
}
memset(dp,9999,sizeof(dp));
for(int i=1;i<=m;i++)
{
if(a[i].x[1]!=1)
{
dp[i][0]=0;
continue;
}
for(int j=1;j<=a[i].s;j++) dp[i][a[i].x[j]]=1;
for(int j=1;j<=1000;j++)
{
if(dp[i][j]==1)
{
if(dp[i][j]>n)
{
dp[i][0]=j-1;
break;
}
continue;
}
dp[i][j]=min(dp[i][j],minn(i,j));
if(dp[i][j]>n)
{
dp[i][0]=j-1;
break;
}
}
}
int ii=-1,min_dp=-1,min_s=0,min_o=99999999;
for(int i=1;i<=m;i++)
{
if(dp[i][0]>min_dp) min_dp=dp[i][0],min_s=a[i].s,min_o=a[i].x[a[i].s],ii=i;
if(dp[i][0]==min_dp)
{
if(a[i].s>min_s) min_dp=dp[i][0],min_s=a[i].s,min_o=a[i].x[a[i].s],ii=i;
if(a[i].s==min_s)
if(a[i].x[a[i].s]<min_s) min_dp=dp[i][0],min_s=a[i].s,min_o=a[i].x[a[i].s],ii=i;
}
}
/*cout<<endl<<endl;
for(int i=1;i<=1000;i++) cout<<dp[1][i]<<" ";
cout<<endl<<endl;
for(int i=1;i<=1000;i++) cout<<dp[2][i]<<" ";
cout<<endl<<endl;*/
cout<<min_dp<<endl;
cout<<a[ii].x[1];
for(int i=2;i<=a[ii].s;i++) cout<<" "<<a[ii].x[i];
return 0;
}
/*
10
2
5 1 7 16 31 88
5 1 15 52 67 99
*/

  

LRJ入门经典-0905邮票和信封305的更多相关文章

  1. LRJ入门经典-0906最短公共父串305

    原题 LRJ入门经典-0906最短公共父串305 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 给定字符串A和字符串B,要求 ...

  2. LRJ入门经典-0903切蛋糕305

    原题 LRJ入门经典-0903切蛋糕305 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 如图所示有一个矩形蛋糕,上面划分成 ...

  3. LRJ入门经典-0907万圣节的小L306

    原题 LRJ入门经典-0907万圣节的小L306 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 今天是万圣节,小L同学开始了 ...

  4. C++语言学习——LRJ入门经典笔记

    1.scanf的输入格式,空格.TAB和回车符都是无关紧要,所以按Enter键并不意味着输入结束. 告诉程序输入结束的方式: 在windows下,输入完毕后先按Enter键,再按Ctrl+Z键,最后再 ...

  5. 强烈推荐visual c++ 2012入门经典适合初学者入门

    强烈推荐visual c++ 2012入门经典适合初学者入门 此书循序渐进,用其独特.易于理解的教程风格来介绍各个主题,无论是编程新手,还是经验丰富的编程人员,都很容易理解. 此书的目录基本覆盖了Wi ...

  6. <Node入门经典>读书笔记

    最近在读<Node入门经典>, 之前没有做笔记, 今天开始把看过自己又写了的代码放这里以免忘记. express var express = require('express') var ...

  7. 正经学C#_介绍与其编写基础:《c#入门经典》

    本文所讲内容,均可在<c#入门经典>中可以查询.如有错误,敬请指出.谢谢! C#:全称C Shar.是微软.Net Framework平台下最为主要的客户语言之一.个人理解,c#是微软最为 ...

  8. SQL入门经典(十) 之事务

    事务是什么?事务关键在与其原子性.原子性概念是指可以把一些事情当作一个执行单元来看待.从数据库角度看待.他是指应该全部执行或者全部不执行一条或多条语句的最小组合.当处理数据时候经常确保一件事发生另一件 ...

  9. 《Web编程入门经典》

    在我还不知道网页的基础结构的时候,我找过很多本介绍Web基础的书籍,其中这本<Web编程入门经典>,我认为是最好的. 这本书内容很全面.逻辑很严谨.结构很清晰.语言文字浅显易懂. 看这本书 ...

随机推荐

  1. elasticsearch中的几个概念总结

    1.Geo spatial search : 地理空间搜索,可以在搜索查询中指定的某一距离内查找所要的内容.也可以返回以当前为圆心,逐渐添加圆的半径.直到找到所匹配到的内容. 參考:http://ww ...

  2. POJ 2110 二分+暴搜

    题意: 给你一个矩阵 ,你能往各个方向走(不走出去就行),每次只能上下左右走一格,问路径上的点权最大值和最小值的差最小是多少. 思路: 首先 二分最后的答案, 暴力枚举当前的区间是啥. DFS 就OK ...

  3. 2013亚洲区域赛长沙站 ZOJ 3732 Graph Reconstruction

    题目链接 Graph Reconstruction 题意 给你无向图每个点的度数, 问是否存在唯一解, 存在输出唯一解, 多解输出两个, 无解输出IMPOSSIBLE 思路 这里用到了 Havel-H ...

  4. nginx 代理https后,应用redirect https变成http --转

    原文地址:http://blog.sina.com.cn/s/blog_56d8ea900101hlhv.html 情况说明nginx配置https,tomcat正常http接受nginx转发.ngi ...

  5. CUDA学习笔记(三)

    近期对CUDA的理解,是对库的利用. 1 nvcc.exe是CUDA C编译器. 2 cudart.dll是CUDA运行时API动态链接库. 3 在Sdk目录下,\lib有CUTIL.CUDPP等函数 ...

  6. Android-加载大图避免OOM

    高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状.不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统图片库里展示的图片大都是 ...

  7. 如何用Java实现反转排序

    摘要:反转排序是将原先已经排序好了的重新排序,是原来的数组元素的顺序反转过来.假设原来的数组顺序是{6,5,4,3,2,1},反转之后的顺序就是{1,2,3,4,5,6}.这个排序的算法不是很难,代码 ...

  8. vue打包后显示空白正确处理方法

    vue打包后显示空白正确处理方法是 1.找到配置文件(js与css加载不上) 修改 这样打包处理可以打开但是页面样式会找不到 2.修改(针对css中的图片加载不上) 找到对应的位置加上publicPa ...

  9. decision tree 决策树(一)

    一 决策树 原理:分类决策树模型是一种描述对实例进行分类的树形结构.决策树由结点(node)和有向边(directed edge)组成.结点有两种类型:内部结点(internal node)和叶结点( ...

  10. [洛谷P3929]SAC E#1 - 一道神题 Sequence1

    题目大意:给你一串数列,问你能否改变1个数或不改,使它变成波动数列? 一个长度为n的波动数列满足对于任何i(1 <= i < n),均有: a[2i-1] <= a[2i] 且 a[ ...