原题

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. BZOJ2179: FFT快速傅立叶 & caioj1450:【快速傅里叶变换】大整数乘法

    [传送门:BZOJ2179&caioj1450] 简要题意: 给出两个超级大的整数,求出a*b 题解: Rose_max出的一道FFT例题,卡掉高精度 = =(没想到BZOJ也有) 只要把a和 ...

  2. 使用caffemodel模型(由mnist训练)测试单张手写数字样本

    caffe中训练和测试mnist数据集都是批处理,可以反馈识别率,但是看不到单张样本的识别效果,这里使用windows自带的画图工具手写制作0~9的测试数字,然后使用caffemodel模型识别. 1 ...

  3. 14.mocha+should.js

    转自http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html 众所周知对于任何一个项目来说,做好单元测试都是必不 ...

  4. 45.angular路由设置

    转自:https://www.cnblogs.com/best/tag/Angular/ AngularJS 路由也可以通过不同的模板来实现. $routeProvider.when 函数的第一个参数 ...

  5. 7. 关于IntelliJ IDEA删除项目

    转自:https://www.cnblogs.com/zhangqian27/p/7698148.html 刚开始使用IDEA . 自己创建项目玩,结果发现IDEA无法删除,我也是醉了,Eclipse ...

  6. springboot actuator shutdown正确的关闭操作

    今天整合ehcache时发现一个很重要的问题,就是程序关闭(硬关闭)之后,持久化到磁盘的缓存数据没能正确写入加载,问题还是硬关闭的问题,所以就使用actuator 进行监听 <dependenc ...

  7. vue computed自动计算

    <!DOCTYPE html> <html> <head> <title>vue</title> <meta charset=&quo ...

  8. python shutil 模块 的剪切文件函数 shutil.movemove(src, dst),换用 os.rename(sourceFile, targetFile)

    Google 一搜python 剪切文件,出来shutil 这模块,网上很多人也跟疯说shutil.move(src, dst)就是用来剪切文件的,结果一试,剪切毛线,文件都复制到另一个文件夹了,源文 ...

  9. CSS 预处理语言之 less 篇

    less 前言 Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合(mixin).函数等功能,让 CSS 更易维护.方便制作主题.扩充. 安装 客户端使用 // 引入 ...

  10. Unity Shader实现各种进度条

    1.圆形进度条shader Shader "ProgressBar360" { Properties { _BGTex("Background Texture" ...