首页 > 其他分享 >落基山脉(区间dp)

落基山脉(区间dp)

时间:2023-09-23 16:27:08浏览次数:35  
标签:int long 落基 区间 山脉 对称 include dp

  • 题意

题目链接:https://www.luogu.com.cn/problem/P9325

给一段山脉的高度,然后从中截取一段长度为 i 的区间,求最小不对称值。不对称值就是这段区间里,最左边的高度与最右边的高度的差值加上倒数第二和第二,……。然后输出区间长度从 1 到 n 的最小不对称值。

  • 思路

很容易想到暴力写法,n^3。显然不行。
区间dp,先枚举区间长度,然后枚举左端点。这里的区间dp不太一样,是枚举的中点。因为这是对称的,所以我们还需要看是奇是偶。如果是奇数,那么 dp[i] = dp[i-2] 加上新添加的左右端点差值。偶数同理,只是下标不一样。

dp[i][j] 代表长度为 i ,中点下标为 j 时最小的不对称值。

  • 代码

#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
#include<queue>
#include<math.h>
#include<stack>
#include<map>
#include<list>
#include<unordered_set>
#include<unordered_map>
#define endl '\n';
//#define int long long;
using namespace std;
typedef long long ll; 
const int N = 5e3+10;
int n, m, k;
ll a[N], dp[N][N], h[N];

void sovle(){
    cin >> n;
    for (int i = 1; i <= n; i ++)cin >> a[i], h[i] = 3e9;

    for (int i = 2; i <= n; i ++){
        for (int j = 1; j <= n; j ++){
            int k = i / 2;
            int flag = 0;
            if (i%2)flag = 1;
            if (flag && (j - k < 1 || j + k > n))continue;
            else if (!flag && (j - k + 1 < 1 || j + k > n))continue;
            else {
                if (flag)dp[i][j] = dp[i-2][j] + abs(a[j-k] - a[j+k]);
                else dp[i][j] = dp[i-2][j] + abs(a[j-k+1] - a[j+k]);
                h[i] = min(h[i], dp[i][j]);
            }
        }
    }

    cout << "0";
    for (int i = 2; i <= n; i ++){
        cout << " " << h[i];
    }
}

int main()
{	
    int t = 1; 
    //scanf("%d", &t);
    
    while (t --){
        sovle();
    }

    return 0;
}



标签:int,long,落基,区间,山脉,对称,include,dp
From: https://www.cnblogs.com/Shunn/p/17724524.html

相关文章

  • P7916 [CSP-S 2021] 交通规划 sol-最短路+环形dp
    P7916[CSP-S2021]交通规划solStatement传送门Solution好题。发现\(k\le2\)的分值非常多,于是我们考虑从\(k=2\)入手。颜色相同就不用说了,直接染成同一种颜色就行了。我们考虑其他情况,就是颜色不相同的情况,我们一定是找了一条路径把这个图给切开了就像这个样子。......
  • 学不会的动态规划——状压DP
    前言不知道为什么越是接近网络赛就越是静不下心来,可能也是因为开学了吧,QAQ,有一说一还是暑假比较适合训练。第一场网络赛,特意选了一个属于我们队的“风水宝地”(其实是我们去的早获得了优先选择权),但是好像并没有什么用,读题读巨慢,还被签到卡了2h(大概,有点不记得了),最后开j,队友推公式写......
  • Exam DP-300: Administering Microsoft Azure SQL Solutions 微软Azure SQL Solutions
    作为该考试的考生,您应具备构建数据库解决方案方面的主题专业知识,这些解决方案旨在支持使用数据库构建的多种工作负载:企业内部SQLServerAzureSQL服务您是一名数据库管理员,负责管理使用SQLServer和AzureSQL服务构建的内部部署和云数据库。作为Azure数据库管理员,您......
  • 小白也能看懂的插件化DroidPlugin原理(三)-- 如何拦截startActivity方法
    **前言:**在前两篇文章中分别介绍了动态代理、反射机制和Hook机制,如果对这些还不太了解的童鞋建议先去参考一下前两篇文章。经过了前面两篇文章的铺垫,终于可以玩点真刀实弹的了,本篇将会通过Hook掉startActivity方法的一个小例子来介绍如何找出合适的Hook切入点。开始之前我们......
  • # github.com/coreos/etcd/clientv3/balancer/resolver/endpoint
    linux使用go连接etcd集群时报错:#github.com/coreos/etcd/clientv3/balancer/resolver/endpoint/root/go/pkg/mod/github.com/coreos/etcd@v3.3.27+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:114:87:undefined:resolver.BuildOption/root/go/pkg/mod/g......
  • kubernetes初始化时报错:CRI v1 runtime API is not implemented for endpoint \"unix
    近日,进行Kubernetes初始化时报错如下:[root@k8s-master~]#kubeadminit--kubernetes-version=v1.28.2--pod-network-cidr=10.244.0.0/16--service-cidr=10.96.0.0/12--apiserver-advertise-address=10.10.10.185[init]UsingKubernetesversion:v1.28.2[preflight]Runn......
  • 升级UBUNTU 18.04时出现DPKG错误
    报错:dpkg:errorprocessingpackageca-certificates-uniontech(--configure):解决:sudodpkg--configure-a  参考:升级UBUNTU18.04时出现DPKG错误 ......
  • TCP vs UDP:揭秘可靠性与效率之争
    概述今天我们开始主要讲解TCP的相关知识点。在之前讲解分层章节的时候,我们提到过一个重要观点。在网络层及以下几层,更多的是让主机与主机建立连接,也就是说你的电脑需要知道另一台电脑在哪里才能连接上它。然而,在网络中的通信往往是进程间的通信,而不是机器间的通信。因此,TCP协议引......
  • 在 Python 中,可以使用线程池(ThreadPoolExecutor)和 wait 方法来等待线程池中的所有任务
    importconcurrent.futures#创建一个线程池withconcurrent.futures.ThreadPoolExecutor()asexecutor:#提交任务给线程池task1=executor.submit(func1,arg1)task2=executor.submit(func2,arg2)task3=executor.submit(func3,arg3)#使......
  • yourls安装-报错AbstractExtendedPdo.php
    1`Fatalerror:UncaughtPDOException:SQLSTATE[HY000]:Generalerror:3Errorwritingfile'./example_com/yourls_url.frm'(Errcode:28)in/www/wwwroot/example.com/includes/vendor/aura/sql/src/AbstractExtendedPdo.php:565Stacktrace:#0/www/w......