hdu 6357 Hills And Valleys思维

2018多校第五场hdu 6357 Hills And Valleys(动态规划) 题目网址http://acm.hdu.edu.cn/showproblem.php?pid=6357 题意: 将一个数字序列中的一段区间翻转,求翻转后的最长非递减序的子串长度,和翻转区间的左右边界。    自己思考了一下,结合了一个简单一点的cf 934C题 题解https://blog.youkuaiyun.com/mitsuha_/article/details/79326891 再加上dls的讲... 阅读详情

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6357

将枚举【i,j】区间化为枚举值域,原问题转化为两串的最长公共子序列问题,其中构造串可以重复的匹配

#include<bits/stdc++.h>
#define mod 1000000007
#define For(i,m,n) for(int i=m;i<=n;i++)
#define LL long long
#define lan(a,b) memset(a,b,sizeof(a))
#define maxn 100005
using namespace std;

char s[maxn];
int a[maxn];
int b[maxn];
int ans,ansl,ansr;
int teml,temr;
int n;

int dp[maxn][22],tl[maxn][22],tr[maxn][22];

int pin(int cnt)
{

    For(i,1,n)
    For(j,1,cnt)
    {
        if(i==1)
        {
            dp[i][j]=0;
        tr[i][j]=0;
        tl[i][j]=0;
        }
        else
        {
             dp[i][j]=dp[i-1][j];
        tr[i][j]=tr[i-1][j];
        tl[i][j]=tl[i-1][j];
        }

        if(a[i]==b[j])
        {
            dp[i][j]++;
            if(teml==j&&tl[i][j]==0)
                tl[i][j]=i;
            if(temr==j)
                tr[i][j]=i;
        }
        if(dp[i][j]<dp[i][j-1])
        {
            dp[i][j]=dp[i][j-1];
            tl[i][j]=tl[i][j-1];
            tr[i][j]=tr[i][j-1];
        }
    }
    return dp[n][cnt];
}

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        scanf("%s",s);
        ans =-1;
        ansl=0;
        ansr=0;
        int L=9,R=0;
        bool f=1;
        For(i,0,n-1)
        {
            a[i+1]=s[i]-'0';
            L=min(L,a[i+1]);
            R=max(R,a[i+1]);
            if(a[i+1]<a[i-1])f=false;
        }
//        for(int i=1;i<=n;i++)
//            printf("%d ",a[i]);
//        printf("\n");
//        if(L==R||f)
//        {
//            printf("%d %d %d\n",n,1,1);
//            continue;
//        }

        int temp=0;
        for(int i=L;i<=R;i++)
            b[++temp]=i;
        int ans=pin(temp);
        ansl=1;
        ansr=1;
       // printf("L=%d R=%d\n",L,R);
        For(l,L,R)
        For(r,l+1,R)
        {
//        printf("l=%d r=%d\n",l,r);
            int cnt=0;
            for(int i=L;i<=l;i++)
                b[++cnt]=i;
                teml=cnt+1;
            for(int i=r;i>=l;i--)
                b[++cnt]=i;
                temr=cnt;
            for(int i=r;i<=R;i++)
                b[++cnt]=i;
//            for(int i=1;i<=cnt;i++)
//                printf("%d ",b[i]);
//            printf("\n");
//            printf("teml=%d temr=%d\n",teml,temr);
            int temans=pin(cnt);
//            printf("ans=%d %d %d\n",temans,tl[n][cnt],tr[n][cnt]);
            if(ans<temans&&tl[n][cnt]&&tr[n][cnt])
            {
                ans=temans;
                ansl=tl[n][cnt];
                ansr=tr[n][cnt];
            }
        }
        printf("%d %d %d\n",ans ,ansl,ansr);
    }
    return 0;
}

 

ANSYS Fluent中的声学模型:实用指南 文章摘要 本文介绍了ANSYS Fluent中三种气动声学模拟方法:Ffowcs-Williams & Hawkings(FWH)模型、宽带噪声源模型和波动方程模型。FWH模型适用于外部气动声学问题,需要瞬态流场数据来预测远场噪声;宽带模型基于稳态RANS模拟,可快速识别噪声源位置,适合早期设计阶段;波动方程模型直接求解声波方程,提供全域声压分布,但仅适用于低马赫数流动。文章详细说明了各模型的使用场景、设置步骤和关键参数配置,为工程应用提供了实用指南。 阅读详情

相关推荐

newman的使用

Newman是一个基于Node.js的postman命令行工具,用于运行和测试PostmanAPI 请求的集合。它允许用户在命令行环境中执行Postman的JSON文件,从而实现接口自动化测试和持续集成,同时支持用户进行自动化测试、批量执行请求、生成报告等操作。

m0_62825058的博客 1616

TMS320C5x DSP音频驱动开发:C语言实现AIC配置与内存映射访问

在嵌入式系统开发中,内存映射I/O是处理器与外部设备通信的核心机制,它允许CPU通过读写特定内存地址直接操控硬件寄存器。其原理在于将外设寄存器映射到处理器的地址空间,从而无需专用I/O指令即可访问。这项技术对于实现高效、低延迟的硬件控制至关重要,尤其在数字信号处理(DSP)和实时音频处理领域。通过C语言的指针和volatile关键字,开发者可以安全、直接地操作这些寄存器,而利用结构体位域和联合体则能优雅地处理包含多字段的硬件数据帧,提升代码可读性与可维护性。这些基础技术广泛应用于设备驱动开发,例如为TI T

weixin_30800987的博客 630

Crossformer实战:从零开始搭建多变量时间序列预测模型(附ETTh1数据集调参指南)

本文提供了从零开始搭建Crossformer多变量时间序列预测模型的实战指南,并附有详细的ETTh1数据集调参攻略。文章深入解析了Crossformer的核心设计,重点探讨了seg_len和win_size等关键参数对模型性能的影响,并分享了环境配置、训练调试及常见问题的解决方案,帮助开发者高效应用这一前沿深度学习模型。

weixin_29281915的博客 317

HDU6357——Hills And Valleys

点击打开原题目 题意:给一串由n个数字组成的字符串,选择其中一个区间进行翻转,要求翻转后该字符串的最长非降子序列长度最长,输出这个最长非降子序列的长度以及翻转的区间的左右端点。 题解:由于n的大小为1e5,如果直接枚举a中的翻转位置的话,那么复杂度肯定不行,但是这里有一种十分巧妙的做法。首先如果是求一个只有数字的串中的最长上升子序列长度的话,那就是这个串与 "0123456789" 这个串的最...

wookaikaiko的博客 614

WSL中使用VMD图形化界面

【代码】WSL中使用VMD图形化界面。

handsome213的博客 840

1、Ovirt 开源虚拟化平台安装

Ovirt虚拟化Node和Engine安装

大鱼 6266

【HDU6357】Hills And Valleys(DP)

题意 给定一个数组,元素均在[0,9],可以翻转一段区间,求最长不下降子序列 题解 很巧妙的DP

CaptainChen的博客 352

从0死磕全栈之使用 VS Code 调试 Next.js 应用完整指南

调试目标推荐方式客户端组件VS Code + Chrome 调试器(pwa-chrome中间件(Middleware)同服务端方式静态生成(SSG)逻辑需在next build时调试,建议改用dynamic路由临时测试通过合理配置 VS Code 调试器,你可以像调试普通 Node.js 或前端项目一样,高效排查 Next.js 应用中的各类问题。🐞。

weixin_44058951的博客 1159

hdu6357(DP姿势 LIS->LCS)

这个题想了好久。。其实已经想到枚举x和y了然后就不造怎么dp。。 这个姿势比较特殊,得学一下。。 枚举完x和y之后先把简化的序列b构造出来,即1 2 3 ..x y y-1 y-2 ... x+1 x y y+1 ... n这样。。 然后以类似lcs的方式去匹配b,当然要算重复的点。。 具体来说就是设d[i][j]为匹配到原序列i位置和b序列中的j位置的a的最长序列 那么d[i][j]=...

qkoqhh 639

DeepSeek Harness实战:从零构建插件化AI Agent

AI Agent开发正从硬编码走向框架化组织,插件化架构成为提升工程效率的关键。在构建可复用、可扩展的智能体系统时,开发团队需要一套能够统一管理模型调用、工具注册与上下文组装的基础设施。DeepSeek Harness作为面向Agent工程的插件化框架,通过Harness、DeepAgent与Skill三个核心抽象,将模型、工具与技能解耦为可插拔单元,让开发者无需重复造轮子即可快速搭建具备工具调用能力的智能体。本文从环境配置到Skill插件开发,完整演示如何基于DeepSeek模型构建一个可运行的Agent

weixin_34279184的博客 447

FCTA/FCTB 前方交通穿行预警/制动系统技术规范

FCTA&FCTB前方交叉路口预警制动系统是针对十字路口和停车场等"鬼探头"场景设计的驾驶辅助系统。系统在自车速度0-40km/h范围内工作,通过角雷达和摄像头检测侧向来车.

未知艺术家的博客 739

HDU 6357 Hills And Valleys(思维 动态规划)

题目链接:Hills And Valleys 题意 给定一个长度为 nnn 的序列,可以选择序列上的一个区间 [l,r]&nbsp;(1≤l≤r≤n)[l,r]&nbsp;(1≤l≤r≤n)[l,r]~(1\leq l\leq r\leq n),将这个区间上的所有数字翻转,求进行一次操作后能够得到最长非递减子序列的长度。 输入 第一行为一个整数 T&nbsp;(1≤T≤1...

Dmaxiya 703

软硬件融合加速技术系列文章

目录 文章目录目录计算机组成原理Linux 操作系统原理处理器进程管理内存管理I/O 系统文件系统网络协议栈资源管理设备管理GPUFPGASmartNIC/DPU 计算机组成原理 《计算机组成原理 — 冯诺依曼体系结构》 《计算机组成原理 — 基本硬件设备》 《计算机组成原理 — CPU 中央处理器》 《计算机组成原理 — 指令系统》 《计算机组成原理 — 总线系统》 《计算机组成原理 — 存储系统》 《计算机组成原理 — 输入输出系统 — 存储控制器接口类型》 《计算机组成原理 — 服务器》 《计算机组成

烟云的计算 6806

HDU 6357 Hills And Valleys 【LCS+思维】

题目链接 题意:给一串数(长度&amp;amp;lt;=1e5),翻转其中的一段区间,使得翻转后这串数的最长不下降子序列的长度最大。求最大的长度以及翻转的区间的左右端点。 明显不可能遍历所有的子区间……但是里面的每个数都只有0到9,因此可以枚举翻转的区间的左右端点的值。例如左端点的值是L,右端点的值是R,那么求出原串和0,1,2,…,L,(R,R-1,..,L),R,R+1,…,9这个模式串的LCS。维护最大...

hxh的博客 355

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

HDU 6357 Hills And Valleys 【DP】

  Hills And Valleys Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 296    Accepted Submission(s): 98Special Judge   Problem Description ...

tystrwor的博客 510

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

hdu 6357 Hills And Valleys

Problem Description Tauren has an integer sequence A of length n (1-based). He wants you to invert an interval [l,r] (1≤l≤r≤n) of A (i.e. replace Al,Al+1,⋯,Ar with Ar,Ar−1,⋯,Al) to maximize the lengt...

zstu_zy的博客 335

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

HDU 6357 Hills And Valleys (DP)

题目链接 给出一个由0-9构成的串,允许将其中的一个子区间翻转,求最长不下降子序列的长度及翻转的区间。 枚举翻转区间的端点显然是不行的,可以换个思路,枚举翻转区间的值域。 假设翻转的区间是[x,y],那么参与构成最长不下降子序列的元素在翻转之前必然是这样的: 0`,1`,.....(x-1)`,x`,y`,(y-1)`,...(x+1)`,x`,y`,(y+1)`.....8`,9`。其中k...

NPU_SXY的博客 334

HDU-6357 Hills And Valleys(DP)

Hills And Valleys Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 146    Accepted Submission(s): 47Special Judge   Problem Description Tau...

十分残念的博客 449

hdu 6357Hills And Valleys

分成三段:第一段递增,第二段有上下界,递减,第三段递增。 可以预处理出第一段和第三段,然后第一段与第二段进行dp ​ #include &lt;bits/stdc++.h&gt; using namespace std; const int MX = 1e5+7; int n; int pre[MX][10],suf[MX][10]; int f[2][10][10][10]; int po...

qq_18869763的博客 345

hdu6357(日了皮皮虾的dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6357 思路:要找最长上升子序列,所以b序列是0123456789这样的,拿原序列和b序列匹配,让b序列中每个数的数量尽量多那么答案肯定较优,因为要翻转一个区间,直接翻转原序列情况较多,所以可以翻转b序列,情况只有45种,比如你选了(3,6),那么b序列就变成了012365436789,然后只要拿翻转...

llmxby 376

HDU-6357Hills And Valleys(用最长可重复公共子序列求最长非递减子序列)

传送门 思路: 对于一个串,如果我们知道了它翻转后最长的非递减子序列,那它去重之后一定是a1&lt;a2&lt;a3……&lt;an 这种形式,ai只能取0~9 。所以我们可以求出原序列最大值, 最小值,构造一个pat匹配串,VL,VL+1,……VH,然后枚举翻转每一个区间(一共是C(10,2)个),和原串做最长公共子序列。在翻转区间的时候要多加上端点值,比如说, 122432445, pa...

du_lun的博客 363

HDU-6357(...这道题还真是巧妙...)

                                                                                Hills And Valleys                                                            Time Limit: 2000/1000 MS (Java/Others) Pro...

nka_kun的博客 1134

【DP】HDU6357 Hills And Valleys

分析: 真是石乐志的一道题目啊。。。。 这题我考场上现推的DP和官方题解一点关系都没有。。。。 还是说说官方题解的做法吧 它把最长不下降子序列映射成两个序列的最长公共子序列问题 a序列就是给出的原序列 b序列是值域的序列 需要注意的是:b序列可以重复匹配 一般的最长不下降子序列中,b序列就是:0,1,2,3,4,5,6,7,8,9 这样a和b的最长公共子序列就是一个最长不下降子序...

氧化钠的博客 1093

Hills And Valleys

You are given a sequence of n integers a1, a2, …, an. Let us call an index j (2≤j≤n−1) a hill if aj>aj+1 and aj>aj−1; and let us call it a valley if aj<aj+1 and aj<aj−1. Let us define the intimidation value of a sequence as the sum of the numbe

qq_45772483的博客 471

hdu 6357 Hills And Valleys——dp

题意:给你一串数,你可以反转任意一个区间,也可以不反转,使得反转后整个串的LIS最长,输出LIS长度以及反转的区间(spj) 思路:因为每个数的数值只有0~9,所以可以从数值出发,枚举反转区间的值域【x, y】,根据这个值域可以构造一个串: {0,1,...x}{y,y-1,...x}{y,y+1,...9},设原串为A,新构造的串为B,那么只要求A和B的LCS就可以了(注意这个LCS稍微特殊...

hao_zong_yin的博客 481

hdu 6357 (求一个序列对另一个序列的最长可重复公共子序列)

Hills And Valleys Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 894    Accepted Submission(s): 279Special Judge   Problem Description Ta...

yjt9299的博客 349
上一篇: hdu 6327 Random Sequence
下一篇: Codeforces Round#502 (Div1+Div2)D. The Wu
Dale_zero
博客等级 码龄9年 10粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值