Atcoder Beginner Contest 118
A: B +/- A
- 签到题.
B: Foods Loved by Everyone
- 签到题.
C: Monsters Battle Royale
- 怪物的血量一直两两相减,类似于辗转相减法.
- 可以证明,最后存活怪物血量最小值即为所有怪物初始血量的 \(gcd\) .
D: Match Matching
- 考虑 \(dp\) 预处理一个数组 \(f\) , \(f[i][j]\) 表示第一位用数字 \(i\) ,后面一共用 \(j\) 根火柴棒,能拼出数字的最大位数.
- 一共有 \(nm\) 个状态,每次转移 \(O(m)\) ,这个 \(dp\) 的时间复杂度为 \(O(nm^2)\).
- 得到 \(f\) 数组后,考虑从高位到低位贪心构造解.
- 每次都选能使后面位数最大的数字作为当前的这一位,若后面位数相同,则选数字大的.
- 最终答案显然不会超过 \(n\) 位,确定每一位只需比较 \(m\) 个数字的优劣.这一步时间复杂度为 \(O(nm)\) .
- 总时间复杂度为 \(O(nm^2)\) .
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1e9
inline int read()
{
int x=0;
bool pos=1;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
pos=0;
for(;isdigit(ch);ch=getchar())
x=x*10+ch-'0';
return pos?x:-x;
}
int x[11]={0,2,5,5,4,5,6,3,7,6};
int a[11],m,N;
const int MAXN=1e4+10;
int f[11][MAXN];
int n;
int dfs(int i,int j)
{
if(f[i][j]!=-1)
return f[i][j];
if(j==0)
return 1;
if(j<0)
return -inf;
f[i][j]=-inf;
for(int k=1;k<=m;++k)
{
if(j>=x[a[k]])
f[i][j]=max(f[i][j],1+dfs(i,j-x[a[k]]));
}
return f[i][j];
}
bool better(int i,int j,int k)
{
if(i-x[a[j]]<0)
return false;
if(!k)
return true;
if(f[a[j]][i-x[a[j]]]>f[a[k]][i-x[a[k]]])
return true;
if(f[a[j]][i-x[a[j]]]==f[a[k]][i-x[a[k]]] && a[j]>a[k])
return true;
return false;
}
int main()
{
n=read(),m=read();
memset(f,-1,sizeof f);
for(int i=1;i<=m;++i)
a[i]=read();
int i,j,k;
for(int i=1;i<=m;++i)
dfs(a[i],n-x[a[i]]);
for(i=n;i;)
{
k=0;
for(j=1;j<=m;++j)
if(better(i,j,k))
k=j;
i-=x[a[k]];
putchar(a[k]+'0');
}
return 0;
}
Atcoder Beginner Contest 118的更多相关文章
- Atcoder Beginner Contest 118 D-Match Matching(完全背包)
题目链接 题意就是给N根火柴,M个数(M只能是1到9,对应的数字也只能是1到9),只能用这M个出现过的数(但每个数可以随便用多少个,只要火柴够)来拼出一个数字(拼出1,2,3,4,5,6,7,8,9分 ...
- Atcoder Beginner Contest 118 C-Monsters Battle Royale(贪心)
题目链接 题意就是要让给出的数字去互相取余,看看能得到最小的数事多少. 那么就可以从小到大排序,每一次都贪心地把最小的数作为攻击者,去攻击其他的数字(也就是大的取余小的),然后再一次排序,循环这个过程 ...
- AtCoder Beginner Contest 118 解题报告
A - B +/- A #include <bits/stdc++.h> int main() { int a, b; std::cin >> a >> b; b ...
- AtCoder Beginner Contest 100 2018/06/16
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
- AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- AtCoder Beginner Contest 136
AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
- AtCoder Beginner Contest 076
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
随机推荐
- winform无边框窗体点击任务栏最小化
protected override CreateParams CreateParams { get { const int WS_MINIMIZEBOX = 0x00020000; // Winus ...
- python+opencv链接摄像头
import cv2 import numpy as numpy cap=cv2.VideoCapture(0) #设置显示分辨率和FPS ,不设置的话会非常卡 cap.set(cv2.CAP_PRO ...
- Hive 元数据库表信息
Hive 的元数据信息通常存储在关系型数据库中,常用MySQL数据库作为元数据库管理. 1. 版本表 i) VERSION -- 查询版本信息 2. 数据库.文件存储相关 i) DBS -- 存储 ...
- h5 沉浸式状态栏
1. manifest.json的plus节点里面配置 "plus": { "statusbar": {"immersed": true}, ...
- angularJS---初识指令
angularJS 什么是angularJS AngularJS 诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款 ...
- vue 跨域
注意!只能在本地调试使用,上线后url会出错使用以下方法要先引入网络模块 先配置文件:config =>index.js以下部分改为:proxyTable: { '/apis': { // 测试 ...
- 转载:【Oracle 集群】RAC知识图文详细教程(七)--Oracle 11G RAC集群安装
文章导航 集群概念介绍(一) ORACLE集群概念和原理(二) RAC 工作原理和相关组件(三) 缓存融合技术(四) RAC 特殊问题和实战经验(五) ORACLE 11 G版本2 RAC在LINUX ...
- SQL SERVER 正则替换
use pubdbgo IF OBJECT_ID(N'dbo.RegexReplace') IS NOT NULL DROP FUNCTION dbo.RegexReplace GO --开始创建正则 ...
- 12.18 微信扫码获取openid与登陆
官方文档: https://open.weixin.qq.com/ 1.先获取code 1-1 配置项目配置文件 wechat: mpAppId: wxd898fcb01713c658 mpAppSe ...
- form表单序列化之后追加字段
方法是在{}中添加字段 key-value 一一对应,如下: var data = $.param({'state': state}) + '&' + $('#desProForm').ser ...