题目描述

Find the largest integer that can be formed with exactly N matchsticks, under the following conditions:
Every digit in the integer must be one of the digits A1,A2,...,AM(1≤Ai≤9).
The number of matchsticks used to form digits 1,2,3,4,5,6,7,8,9 should be 2,5,5,4,5,6
,3,7,6, respectively.
Constraints
·All values in input are integers.
·2≤N≤104
·1≤M≤9
·1≤Ai≤9
·Ai are all different.
·There exists an integer that can be formed by exactly N matchsticks under the conditions.

输入

Input is given from Standard Input in the following format:

N M
A1 A2 ... AM

输出

Print the largest integer that can be formed with exactly N matchsticks under the conditions in the problem statement.

样例输入

20 4
3 7 8 4

样例输出

777773

提示

The integer 777773 can be formed with 3+3+3+3+3+5=20 matchsticks, and this is the largest integer that can be formed by 20 matchsticks under the conditions.


题目大意:规定用火柴摆数字的样子,从 1 ~ 9 所需要的火柴分别为2,5,5,4,5,6,3,7,6,现在给出 m 个不同的且小于十的数字,问恰好用完 n 根火柴,使得摆出的数字最大,且该数字必须使用提供的 m 个数字,问最大可以拼出的数字能有多大

题目分析:一开始感觉是先贪心后暴力,但看到需要恰好用掉 n 个火柴感觉有点蹊跷,加上有 m 个数字的限制,使得贪心并不是如此简单,后来发现 n 比较小,且必须要恰好用完 n ,使得结果最大,那不就是一个最优性问题,用dp来解决,恰好用完让我想到了完全背包,这样一来只要重载一下MAX函数,用字符串作为dp数组,花费为每个数字所需要的火柴数,价值为每个数字本身,转移一遍就好了,注意初始化

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e5+100;int a[N];string dp[N];string val="0123456789";int cost[10]={0,2,5,5,4,5,6,3,7,6};string MAX(string a,string b)
{if(a.size()>b.size())return a;if(a.size()<b.size())return b;return a>b?a:b;
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int n,m;scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d",a+i);for(int i=0;i<=n;i++)dp[i]="-";dp[0]="";for(int i=0;i<=n;i++){if(dp[i]=="-")continue;for(int j=1;j<=m;j++)if(i+cost[a[j]]<=n)dp[i+cost[a[j]]]=MAX(dp[i+cost[a[j]]],dp[i]+val[a[j]]);}cout<<dp[n]<<endl;return 0;
}

中石油训练赛 - Match Matching(完全背包)相关推荐

  1. 中石油训练赛 - Trading Cards(最大权闭合子图)

    题目大意:给出 n 个卡片,可以自由买卖,且价格都是相同的,再给出 m 个集合,如果已经得到了其中一个集合中的卡片,那么可以获得该集合的收益,问如何操作可以使得收益最大化 题目分析:最大权闭合子图的模 ...

  2. 中石油训练赛 - Watch Later(状压dp)

    题目链接:点击查看 题目大意: 给出一个长度为 n 的字符串,字符串中共有 k 种不同的字符,现在问删除掉所有字符的最小操作数,对于每种字符需要确定一个先后顺序,每次需要删除掉当前所有的这种字符才能去 ...

  3. 中石油训练赛 - Swapping Places(字典序最小的拓扑排序)

    题目链接:点击查看 题目大意:给出 s 个字符串表示种类,再给出 m 个朋友关系,表示两个种类的动物是朋友,现在给出一个长度为 n 的种类排列,规定相邻两个是朋友的种类的动物可以交换位置,问如何操作, ...

  4. 中石油训练赛 - Gone Fishing(固定大小的圆可以覆盖最多的点)

    题目大意:在二维平面中给出 n 个点,再给出一个固定大小的圆,问如何放置这个圆可以使其覆盖最多的点 题目分析:首先不难想到一种 n^3 的做法,就是两层循环去枚举两个点,因为两个不同的点就可以确定下来 ...

  5. 中石油训练赛 - Russian Dolls on the Christmas Tree(树上启发式合并/主席树)

    题目链接:点击查看 题目大意:给出一棵 n 个节点的树,以点 1 为根,现在对于每个节点作为根的子树求解:子树中有多少个编号不相交的连续子段,如:1 2 4 5 7,共有三个连续的段,分别为 [ 1 ...

  6. 中石油训练赛 - Check List(线段树维护偏序问题)

    题目大意:给出 n 个点,需要计算出满足下列条件的三元对 ( i , j , k ) 的数量: x[ i ] < x[ j ] < x[ k ] y[ k ] > y[ i ] &g ...

  7. 中石油训练赛 - Bad Treap(数学)

    题目链接:点击查看 题目大意:给出笛卡尔树的定义,现在要求给出 n 个点对 ( x , sin( x ) ),使得笛卡尔树的高度尽可能大 题目分析:如果想让笛卡尔树的高度尽可能大,令其退化为一条链即可 ...

  8. 中石油训练赛 - High Load Database(二分+记忆化)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列,再给出 m 次询问,每次询问给出一个阈值 x ,问最少将数列分割成多少段,可以使得每一段的总和都不超过 x,无解的话输出 Impossible ...

  9. 中石油训练赛 - Plan B(点双缩点+树形dp)

    题目大意:给出一张 n 个点 m 条边的无向连通图,现在有某些点被标记了,问能否通过删除某个未被标记的点,使得删除该点后的数个互不相交的连通块中,至少存在一个联通块中不含有被标记的点 题目分析:首先不 ...

最新文章

  1. PointNet++论文个人理解
  2. Python测试框架pytest(02)PyCharm设置运行pytest、pytest.main()
  3. 架构师已死(转自UML软件工程组织)
  4. Uniform String
  5. java tag和flt区别,这些年,我爬过的 Android 坑 | 持续更新
  6. netcore 内存限制_.NET Core 和 Serverless 构建飞速发展的架构
  7. JavaWeb 如何防止表单重复提交 - 使用Token,令牌
  8. kindeditor图片批量上传失败问题
  9. outlook express重定向
  10. php员工删除,php+mysql删除指定编号员工信息的方法_PHP
  11. 十三、栅栏CyclicBarrier
  12. HTML与CSS各种代码与用法,几种关于html和css的使用方法
  13. web 基本概念辨异 —— URI 与 URL
  14. emacs coding UTF-8 保存报错
  15. 经验分享:我是如何在网店无货源情况下快速出单?
  16. QT 笔记6 | Qt网络编程
  17. PS暂存盘已满怎么办
  18. Android 之6.0 双向通话自动录音
  19. 第二十五届全国青少年信息学奥林匹克联赛初赛
  20. 【面试总结】Unity3D面试题总结

热门文章

  1. ocv特性_实际使用工况的锂离子电池SOC-OCV关系
  2. seata的部署和集成
  3. 初识ES-什么是elasticsearch
  4. 回顾线程的竞争机制-轻量级锁
  5. 包含用法 includeFilters
  6. 自定义线程池-线程池工作流程介绍
  7. ReactJS入门之Model分层的概念
  8. 两个引用指向同一个数组的内存图
  9. 课程介绍 复习 创建对象的三种方式 自定义构造函数创建对象 工厂模式创建对象
  10. pytorch教程龙曲良41-45