牛客网-网易2018笔试第7题 -合唱(DP问题)

2023-11-14


【题目描述】
小Q和牛博士合唱一首歌曲,这首歌曲由n个音调组成,每个音调由一个正整数表示。
对于每个音调要么由小Q演唱要么由牛博士演唱,对于一系列音调演唱的难度等于所有相邻音调变化幅度之和, 例如一个音调序列是8, 8, 13, 12, 那么它的难度等于|8 - 8| + |13 - 8| + |12 - 13| = 6(其中||表示绝对值)。
现在要对把这n个音调分配给小Q或牛博士,让他们演唱的难度之和最小,请你算算最小的难度和是多少。
如样例所示: 小Q选择演唱{5, 6}难度为1, 牛博士选择演唱{1, 2, 1}难度为2,难度之和为3,这一个是最小难度和的方案了。

输入描述

输入包括两行,第一行一个正整数n(1 ≤ n ≤ 2000) 第二行n个整数v[i](1 ≤ v[i] ≤ 10^6), 表示每个音调。

输出描述

输出一个整数,表示小Q和牛博士演唱最小的难度和是多少。

【示例】

【输入】
5
1 5 6 2 1
【输出】
3

【问题分析】(思路来源于牛客网昵称 “啊打头的名字会排在前面” 用户,在此非常感谢)

子问题的话还是dp[j][i] 表示两个人唱的最后两个音符的位置是i和j。其中(j<i)
研究dp[j][i]的转移方程:
如果j+1==i; 比如dp[3][4]那么,其可以到达它的状态有{dp[0][3],dp[1][3],dp[2][3],还有一种情况是3的前面全是由一个人唱的},计算这些前置状态+本次决策的收益并进行比较。
如果j+1!=i; 说明这个状态只能由dp[j][i-1]达到,比如dp[3][5] 它的前状态一定是dp[3][4]

【代码】

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<memory.h>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
 
#define mem(array)  memset((array),0,sizeof((array)))
#define Qsort(array,len,cmp) qsort(array,len,sizeof(array[0]),cmp)
 
#define inf 0x7fffffff
#define MAXN 10+2000
 
using namespace std;
 
int dp[MAXN][MAXN];
int v[MAXN];
 
int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",tdout);
    int n;
    while(cin>>n){
        mem(v);
        for(int i = 1; i <= n; ++i)
            scanf("%d",&v[i]);
        mem(dp); 
        for(int i = 1; i <= n; ++i){
            for(int j = 0; j < i; ++j){
                if(j+1 == i){
                    dp[j][i] = dp[0][j];
                    for(int k = 1; k < j; ++k){
                        dp[j][i] = min(dp[j][i],dp[k][j] + abs(v[k]-v[i]));
                    }
                }
                else{
                    dp[j][i] = dp[j][i-1] + abs(v[i-1]-v[i]);
                }
            }
        }
        int ans = dp[0][n];
        for(int i = 1; i < n; ++i)
            ans = min(ans,dp[i][n]);
        cout<<ans<<endl;
    }
    return 0;
}

 

题目来源于 牛客网

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

牛客网-网易2018笔试第7题 -合唱(DP问题) 的相关文章

随机推荐

  • 沃尔玛(Walrmart)运营指南,爆单技巧

    沃尔玛自2016年快速扩张以来 发展迅速 甚至屡次与亚马逊公开叫板 各种促销活动针锋相对 使得跨境卖家对于沃尔玛的兴趣不断飙升 但是还是有很多跨境玩家对于这个平台不算了解 更不知道其运营逻辑 今天就为大家讲清楚walmart运营技巧 如何快
  • GitHub 上传文件过大报错:remote: error: GH001: Large files detected.

    1 查看哪个文件过大了 remote Resolving deltas 100 24 24 completed with 3 local objects remote warning File CPT 0707 ao temp past t
  • Leetcode 376.摆动序列

    题目 如果连续数字之间的差严格地在正数和负数之间交替 则数字序列称为 摆动序列 第一个差 如果存在的话 可能是正数或负数 仅有一个元素或者含两个不等元素的序列也视作摆动序列 例如 1 7 4 9 2 5 是一个 摆动序列 因为差值 6 3
  • Ubuntu16.04下编译OpenCV3.0.0

    目录 目录 前言 cmake gui安装过程 CMake编译OpenCV300 CMake编译OpenCV320 前言 原来在海思上使用的是OpenCV2 4 9版本 现在需要在odroid上编译OpenCV3 0 0版本 特此记录 cma
  • CentOS 7 常用软件安装汇总

    基本指令 clear 清屏 pwd 显示当前路径 more 显示文本文档 uname a 查看当前核心版本号 free 查看剩余内存 df h 查看磁盘剩余空间 du sh
  • Tomcat 正确安装并启动后,浏览器访问localhost:8080显示404

    目录 1 确认 Tomcat 安装正确 且已打开 2 查看8080端口是否被占用 3 端口被占用的解决方法 在初次使用 Tomcat 时遇到了一些问题 经过一段时间的调试最终将其解决 个人感觉此问题应该比较常见 因此在这做一个分享 关于 T
  • Web 服务器如何工作

    Web 服务器如何工作 什么是网络服务器 Web 服务器是一种侦听传入连接 然后利用 HTTP 协议将 Web 内容传送给客户端的软件 您会遇到的最常见的 Web 服务器软件是 Apache Nginx IIS 和 NodeJS Web 服
  • 某翻译平台的爬虫坑,你踩了吗?

    大家好 我是阿爬 这里是讲述阿爬和阿三爬虫故事的爬友圈 近期 阿三有一个自动化翻译的小需求 于是找到阿爬 想要一个好的方案 阿爬首先想到的是调用某平台的翻译接口 奈何需要付费 于是心想还是用爬虫技术撸一把吧 于是开始了翻译平台逆向 1 初步
  • unity多个相机实现切换

    做项目的过程中遇到一个问题 有6个相机 需要实现点击按钮切换到某个相机 从网上看了一些文章 有些已经不再用了 比如说enable 做的过程中还遇到了找不到组件的情况 趁晚上有时间记录下这些 核心实现方法 gameobject setActi
  • zabbix性能调优

    zabbix性能调优 服务器环境 centos7 zabbix3 2 mariadb 1 从监控项调整 1 关掉没必要的监控项 zabbix自带模板里面涉及各种监控项 实际情况并不需要用到所有的 可以根据自带模板内容自己创建模板 也可以将模
  • ssm+java计算机毕业设计煤矿安全管理信息系统iz40r(程序+lw+源码+远程部署)

    项目运行 项目含有源码 见文末 文档 程序 数据库 配套开发软件 软件安装教程 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe M
  • node运行报错Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested

    node在连接mysql中报错解决 原因 登录数据库的客户端跟mysql8 0不兼容了 mysql8 0密码认证采用了新的密码格式 简单来说就是mysql版本问题 报错信息 mysql模块可以使我们在js中写mysql语句 操作mysql
  • RunTime.getRunTime().addShutdownHook的用法

    RunTime getRunTime addShutdownHook的用法 常识的Blog的博客 CSDN博客
  • 图的五种最短路径算法

    本文总结了图的几种最短路径算法的实现 深度或广度优先搜索算法 费罗伊德算法 迪杰斯特拉算法 Bellman Ford 算法 1 深度或广度优先搜索算法 解决单源最短路径 从起点开始访问所有深度遍历路径或广度优先路径 则到达终点节点的路径有多
  • VLC 不能识别带空格的URL

    转自 http blog csdn net pizicai105 article details 5414944 7 VLC无法识别URL带空格 需要进行转义 转义符为 2B 空格 转义符为 或 20 转义符为 2F 转义符为 3F 转义符
  • Regular Expressions --正则表达式官方教程

    http docs oracle com javase tutorial essential regex index html This lesson explains how to use the java util regex API
  • (11)DataFrame索引和切片

    内容 访问 对列进行访问 对行进行访问 对元素进行访问 切片 import numpy as np import pandas as pd from pandas import Series DataFrame arr np random
  • HikariPool连接池的使用

    HikariDataSource datasource new HikariDataSource xxxx Connection cn datasource getConnection try cn doXXX finnally conne
  • 三、ElasticSerach-映射操作

    上一章学习了Es的文档操作 ElasticSerach 文档操作 本章我们来学习索引中映射的操作 1 创建映射 可以在创建索引的时候就创建 可以参考一 ElsaticSerach 索引操作 创建索引的时候没有添加映射 可以后面添加 创建索引
  • 牛客网-网易2018笔试第7题 -合唱(DP问题)

    题目描述 小Q和牛博士合唱一首歌曲 这首歌曲由n个音调组成 每个音调由一个正整数表示 对于每个音调要么由小Q演唱要么由牛博士演唱 对于一系列音调演唱的难度等于所有相邻音调变化幅度之和 例如一个音调序列是8 8 13 12 那么它的难度等于