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 ...
随机推荐
- Centos中使用Jenkins执行gulp命令:command not found
在Centos操作系统,使用Jenkins的pipeline执行发布流程:jenkinsfile如下: stage("前端项目构架gulp") { steps { dir('src ...
- Java Collections Framework 汇总
1. Java Collections Framework Java集合框架概览 2. Java Collections Framework 之 RandomAccess接口 3. 关于ArrayLi ...
- SPOJ104 HIGH - Highways
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- Codeforces Round #341 (Div. 2) C. Mike and Chocolate Thieves 二分
C. Mike and Chocolate Thieves time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- vue2.0--vue-router路由
一.vue-router如何进行参数传递 1.name $route.name 通过在路由router/index.js中配置路由时定义的name属性来传递 ① 有一个页面components/he ...
- zoom:1;
zoom:1;属性是IE浏览器的专有属性,可以设置或检索对象的缩放比例.触发ie的hasLayout属性.清除浮动.清除magin的重叠等. 注意:它未通过W3C验证.
- RabbitMQ 与 AMQP路由
概述 RabbitMQ(MQ 为 MessageQueue) 是一个消息队列,主要是用来实现应用程序的异步和解耦,同时起到消息缓冲.消息分发作用 消息队列 消息(Message)是指应用间传送的数据, ...
- form组件的验证
django 的form组件可以实现自定义的验证规则. 创建基于Form的类,在类中创建字段,定义规则. 创建该类的对象,并将待验证的数据传入,使用is_valid()函数. is_valid()函数 ...
- Java里\r \n \t
\t 相当于tab,缩进 \n 回车 \r 换行 使用来格式化输出的,如:System.out.printf("11111\t2222222");上面的输出的效果就是在11111与 ...
- Git的基础学习
https://www.w3cschool.cn/git/git-install-setup.html 一.安装 Git官网下载,安装,操作步骤可以百度 二.用户信息配置 配置个人用户名称和邮箱地址: ...