题目意思是给你一个n长度的数字串为a,让你构造一个n长度的数字串b值都为1-5满足以下条件:

正常的dfs暴力构造会超时,我试过了。。

可以开一个二维数组dp[i][j]用来表示b的第i个数字为j是否可行,标记为1或0;

因为第i个数字的大小只会影响第i+1个数字,每次确定i都根据第i-1的数字来判断。

再开一个二维数组pre[i][j]用来表示b的第i个 数字为j时的前一个数字是多少,最后倒推时用stack记录一下输出答案;

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+;
int a[maxn];
int dp[maxn][];
int pre[maxn][];
stack<int> s;
int main()
{
int n;
scanf("%d", &n);
for(int i=; i<=n; i++)
scanf("%d", &a[i]);
for(int i=; i<=; i++)
dp[][i]=;
for(int i=; i<=n; i++)
for(int j=; j<=; j++)
{
if(dp[i-][j]==)
continue;
if(a[i]>a[i-])
{
for(int k=j+; k<=; k++)
{
dp[i][k]=;
pre[i][k]=j;
}
}
if(a[i]<a[i-])
{
for(int k=j-; k>=; k--)
{
dp[i][k]=;
pre[i][k]=j;
}
}
if(a[i]==a[i-])
{
for(int k=; k<=; k++)
if(k!=j)
{
dp[i][k]=;
pre[i][k]=j;
}
}
}
for(int i=; i<=n; i++)
{
for(int j=; j<=; j++)
printf("%d ", pre[i][j]);
printf("\n");
}
int t=;
for(int j=; j<=; j++)
{
if(dp[n][j]==)
t=j;
}
if(t==)
{
printf("-1");return ;
}
for(int i=n; i>=; i--)
{
s.push(t);
t=pre[i][t];
}
while(!s.empty())
{
printf("%d ", s.top());
s.pop();
}
}

C. Playing Piano 动态规划的更多相关文章

  1. Codeforces Round #522 (Div. 2) C. Playing Piano

    C. Playing Piano 题目链接:https://codeforces.com/contest/1079/problem/C 题意: 给出数列{an},现在要求你给出一个数列{bn},满足: ...

  2. Codeforces 1079C Playing Piano(记忆化搜索)

    题目链接:Playing Piano 题意:给定长度为n的序列$a_i$,要求得到同样长度的序列$b_i$.满足一下条件: if $a_i < a_{i+1}$ then $b_i < b ...

  3. Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3) C. Playing Piano

    题意:给出一个数列 a1 a2......an  让你构造一个序列(该序列取值(1-5)) 如果a(i+1)>a(i) b(i+1)>b(i) 如果a(i+1)<a(i)  那么b( ...

  4. CF1079C Playing Piano

    思路: dp. 实现: #include <bits/stdc++.h> using namespace std; ], dp[][]; int main() { int n; while ...

  5. 用特征来实现混入(mix-in)式的多重继承

    用特征来实现混入(mix-in)式的多重继承 Scala里相当于Java接口的是特征(Trait).Trait的英文意思是特质和性状(本文称其为特征),实际上他比接口还功能强大.与接口不同的是,它还可 ...

  6. 大数据系列修炼-Scala课程05

    Scala多重继承.构造器的执行顺序.AOP实现 多重继承的trait实现:Scala中接口可以继承具体的类,trait接口可以实现多重继承,并且某个类也可以继承特定的类,在继承后面可以混入,接口的实 ...

  7. Dart 基础重点截取 Dart 2 20180417

    官网教程 https://www.dartlang.org/guides/language/language-tour dart是一个单线程的语言,没有多线程 Final and const If y ...

  8. Codeforces 1032 - A/B/C/D/E - (Undone)

    链接:http://codeforces.com/contest/1032/ 是真的真的真的忍不住想吐槽这题意是真的真的真的读不懂…… A - Kitchen Utensils - [简单数学题] 题 ...

  9. Scala入门2(特质与叠加在一起的特质)

    一.介绍 参考http://luchunli.blog.51cto.com/2368057/1705025 我们知道,如果几个类有某些共通的方法或者字段,那么从它们多重继承时,就会出现麻烦.所以Jav ...

随机推荐

  1. Nginx配置项优

    1.nginx运行工作进程个数,一般设置cpu的核数或者核心数x2 如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件. [root@localhost~] ...

  2. Centos6.5系统压力测试过程大量TIME_WAIT

    统计tcp状态的命令: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' netstat -n | awk '/ ...

  3. JavaScript将数字转换为大写金额

    用JavaScript将数字转换为大写金额,好了 0.0 To code! var digitUppercase = function(n) { var fraction = ['角', '分']; ...

  4. vue 中如何对公共css、 js 方法进行单文件统一管理,全局调用

    1.前言 最近,为公司开发交付的一个后台管理系统项目,我使用了 Vue 框架进行开发实践. 模块化.组件化.工程化的开发体验非常好.良好的 api,优雅的设计,对于工程师非常友好. 但是由于模块比较多 ...

  5. Vue全局API总结

    1.extend用于创建一个子类Vue,用$mount来挂载 <body> <div id="app"></div> <script> ...

  6. appium---第四个脚本,进入app,有权限弹窗的方法

    1.以淘宝为例:进入首页,会弹出好几个权限弹窗 无法使用id定位 用xpath定位

  7. 笔记本电脑清除BIOS密码

    进bios前输错3次密码弹出八位溢出码为A 用下面的网站计算出结果为B BIOS Master Password Generator for Laptops 登陆bios,输错3次密码后输入B,就可以 ...

  8. Codeforces 781D Axel and Marston in Bitland 矩阵 bitset

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF781D.html 题目传送门 - CF781D 题意 有一个 n 个点的图,有 m 条有向边,边有两种类型: ...

  9. HDU4343Interval query 倍增

    去博客园看该题解 题意 给定n个区间[a,b),都是左闭右开,有m次询问,每次询问你最多可以从n个区间中选出多少[L,R]的子区间,使得他们互不相交. n,m<=10^5. 区间下标<=1 ...

  10. 将xml 写到内存中再已string类型读出来

    System.IO.MemoryStream ms = new System.IO.MemoryStream(); xmlDoc.Save(ms); System.IO.StreamReader sr ...