当前位置: 首页 > ops >正文

【补题】Codeforces Round 715 (Div. 2) C. The Sports Festival

题意:给你一个序列,你可以对它重新排序,然后使每个i,max(a0,a1……ai)-min(a0,a1……ai)最小。问答案是多少

思路:   C. The Sports Festival(区间DP)-CSDN博客

区间dp,完全没想到。

首先有两个观察点很简单
1.一个已经选择好的序列,添加进来的数,如果是最小,或者最大会更新状态,否则不。
2.在添加的过程中,添加进来的数改变两个最值的时候越延迟,次数越多越好。
1 3 2是比1 2 3 差的,因为1 3代替了1 2计算了一次。

在这个基础上使用区间dp,一个区间更新的情况就是新的最大值进入,或者最小值进入
状态转移方程得dp[l][r]=min(dp[l][r-1],dp[l+1][r])+a[r]-a[l](更新的情况一定是新区间的两个最值相加,但是不知道更新的是小还是大)可以说用上了一点贪心,排序过后一些很差的答案都被排除掉了,以及这个答案的更新。

代码:

#include <bits/stdc++.h>
#define int long long
#define IOS std::ios::sync_with_stdio(0);std::cin.tie(0);std::cout.tie(0)const int MOD=1e9+7;
const int N=1e7+10;void solve(){int n;std::cin >> n;std::vector<int> ve(n);std::vector<std::vector<int>> dp(n,std::vector<int>(n,0));for(int i=0;i<n;i++){std::cin >> ve[i];}sort(ve.begin(),ve.end());for(int l=2;l<=n;l++){for(int i=0;i+l-1<n;i++){dp[i][i+l-1]=std::min(dp[i][i+l-2],dp[i+1][i+l-1])+ve[i+l-1]-ve[i];}}std::cout << dp[0][n-1] << '\n';}signed main(){IOS;int t=1;// std::cin >> t;while(t--){solve();}
}

http://www.xdnf.cn/news/12573.html

相关文章:

  • ubuntu20使用自主探索算法explore_lite实现机器人自主探索导航建图
  • 初识redis
  • H_Prj06_03 8088单板机串口读取8088ROM复位内存
  • Jetpack Compose 中,DisposableEffect、LaunchedEffect 和 sideEffect 区别和用途
  • 深入解析 CAS 操作
  • Linux 系统、代码与服务器进阶知识深度解析
  • 【Python】当前最稳定3.12版本安装,基于Anaconda的环境配置及换源
  • 力扣面试150题--除法求值
  • 计算矩阵A和B的乘积
  • 基于Python学习《Head First设计模式》第八章 模板方法模式
  • Readest(电子书阅读器) v0.9.53
  • 缓存一致性 与 执行流
  • STM32学习笔记:外部中断(EXTI)原理与应用详解
  • 什么是可恢复保险丝
  • 永恒之蓝(CVE-2017-0146)详细复现
  • day49 python 注意力热图
  • Oracle 客户端深度指南:SQL Developer 与 PL/SQL Developer 全面安装使用教程
  • MySQL中的内置函数
  • 深入剖析Nginx:从入门到高并发架构实战
  • day24 元组和OS模块
  • 十、【ESP32开发全栈指南: TCP客户端】
  • LinkedList、Vector、Set
  • 嵌入式学习笔记 - freeRTOS vTaskPlaceOnEventList()函数解析
  • VirtualBox启动失败@Ubuntu22.04 说是配置文件有问题
  • 使用ORM Bee (ormbee) ,如何利用SQLAlchemy的模型生成数据库表.
  • “组件、路由懒加载”,在 Vue3 和 React 中分别如何实现? (copy)
  • 使用Python和Flask构建简单的机器学习API
  • MySQL事务与锁中的MVCC 深度解析与面试题讲解
  • Spring AI 核心工作流
  • 每日Prompt:治愈动漫插画