Comet OJ - Contest #8 C题 符文能量 dp动态规划

本文介绍了一种使用动态规划解决符石融合问题的方法,通过分析符石融合的顺序不影响总能量释放这一特性,简化了问题的复杂度。文章详细解释了如何通过四种状态的动态规划来找到最小能量释放方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:https://cometoj.com/contest/58/problem/C?problem_id=2760
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这题的代码其实很简洁,主要是有一个坑点。我们一开始可能会想到要去动态规划怎么走,比如哪两个先融合、哪两个先不融合,然后再处理*k区间;或者顺序反过来。这样想的话,整个动态规划的过程就会变得很复杂。

但如果我们把视野放开一些,或者花点时间模拟一下,我们就会发现,所有符石都不*k的情况下,不论如何选择,最终要融合成一个符石的话,总的释放的能量其实是不变的。我们需要做的,其实是判断是否要有*k区间,这个区间从哪里开始、到哪里结束,才能使得最终的能量尽可能小。

这样的话,dp的维度其实就确定了,因为融合的顺序没有影响,我们直接初始数组每次相邻的都融合,O(n)一遍过去,每次都有四种状态,上代码直接理解,注释里继续说。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#include <iostream>
#include <string.h>
const int MAX=1e6+5;
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
/// https://cometoj.com/contest/58/problem/C?problem_id=2760

ll a[MAX], b[MAX], dp[MAX][5];
int main()
{
  int i, j, n, k;
  cin >> n >> k;
  for (i=0; i<n; i++)
    scanf("%lld%lld", &a[i], &b[i]);
  for (i=1; i<n; i++)/// 状态数组dp从上向下滚动,对应符石从左到右
  {
    dp[i][0] = dp[i-1][0] + a[i]*b[i-1];/// 直接与左边符石融合的情况,顺带上左边
    ///符石和左边的左边符石直接融合产生的能量。dp[i][0]的记录只是为了dp[i][1]的
    ///选择做铺垫,真正的完全不*k的情况会在dp[i][2]被选择
    
    dp[i][1] = min(dp[i-1][0]+k*a[i]*b[i-1], dp[i-1][1]+k*k*a[i]*b[i-1]);/// 两种
    ///状态进行选择,一种是左符石没*k,i符石自己乘;一种是i-1符石和i符石一起乘,
    ///取最优情况记录下来,反正不论选哪个,dp[i][1]记录的都是*k区间覆盖到i符石
    ///的情况
    
    dp[i][2] = min(dp[i-1][1]+k*a[i]*b[i-1], dp[i-1][2]+a[i]*b[i-1]);/// 也是二选
    ///一,一种是i-1符石*k了,到i这里断了不乘了;一种是i-1没乘,i也不乘。所以
    ///dp[i][2]记录的是*k区间没覆盖到i符石的情况
  }
  cout << min(dp[n-1][1], dp[n-1][2]);/// 这里最终取最优
  return 0;
}

其实最终就是有一段区间k、全区间不k这两种结果,而dp记录的是每个状态下释放能量的最优解,所以最终一个max出结果。

# YOLOv5 🚀 requirements # Usage: pip install -r requirements.txt # Base ------------------------------------------------------------------------ gitpython ipython # interactive notebook matplotlib>=3.2.2 numpy>=1.18.5 opencv-python>=4.1.1 Pillow>=7.1.2 psutil # system resources PyYAML>=5.3.1 requests>=2.23.0 scipy>=1.4.1 thop>=0.1.1 # FLOPs computation torch>=1.7.0 # see https://pytorch.org/get-started/locally (recommended) torchvision>=0.8.1 tqdm>=4.64.0 # protobuf<=3.20.1 # https://github.com/ultralytics/yolov5/issues/8012 # Logging --------------------------------------------------------------------- tensorboard>=2.4.1 # clearml>=1.2.0 # comet # Plotting -------------------------------------------------------------------- pandas>=1.1.4 seaborn>=0.11.0 # Export ---------------------------------------------------------------------- # coremltools>=6.0 # CoreML export # onnx>=1.9.0 # ONNX export # onnx-simplifier>=0.4.1 # ONNX simplifier # nvidia-pyindex # TensorRT export # nvidia-tensorrt # TensorRT export # scikit-learn<=1.1.2 # CoreML quantization # tensorflow>=2.4.1 # TF exports (-cpu, -aarch64, -macos) # tensorflowjs>=3.9.0 # TF.js export # openvino-dev # OpenVINO export # Deploy ---------------------------------------------------------------------- # tritonclient[all]~=2.24.0 # Extras ---------------------------------------------------------------------- # mss # screenshots # albumentations>=1.0.3 # pycocotools>=2.0 # COCO mAP # roboflow # ultralytics # HUB https://hub.ultralytics.com
05-25
### YOLOv5 的依赖库及其用途 YOLOv5 是一种高效的实时对象检测框架,其运行需要一系列 Python 库的支持。以下是 YOLOv5 中常见的依赖库以及它们的主要功能: #### 1. **torch** PyTorch 是 YOLOv5 的核心深度学习框架,用于构建和训练神经网络模型[^2]。 它提供了动态计算图支持,使得模型定义更加灵活。 ```python import torch print(torch.__version__) ``` #### 2. **numpy** NumPy 提供了高性能的数组操作能力,广泛用于数据预处理、后处理以及其他数值运算任务[^3]。 ```python import numpy as np arr = np.array([1, 2, 3]) print(arr) ``` #### 3. **opencv-python** OpenCV 被用来加载图像、视频流,并执行各种计算机视觉任务,例如图像增强、颜色转换等[^4]。 ```python import cv2 image = cv2.imread(&#39;example.jpg&#39;) cv2.imshow(&#39;Image&#39;, image) cv2.waitKey(0) ``` #### 4. **matplotlib** Matplotlib 主要用于可视化目的,比如绘制损失曲线或展示检测结果[^5]。 ```python import matplotlib.pyplot as plt plt.plot([1, 2, 3], [4, 5, 6]) plt.show() ``` #### 5. **tqdm** `tqdm` 可以显示进度条,在长时间运行的操作中提供直观反馈[^6]。 ```python from tqdm import tqdm for i in tqdm(range(100)): pass ``` #### 6. **pandas** Pandas 常被用作数据分析工具,特别是在评估阶段整理实验结果时非常有用[^7]。 ```python import pandas as pd df = pd.DataFrame({&#39;A&#39;: [1, 2], &#39;B&#39;: [3, 4]}) print(df) ``` #### 7. **scipy** SciPy 扩展了 NumPy 功能集,增加了更多科学计算方法,可能涉及距离度量或其他统计分析[^8]。 ```python from scipy.spatial.distance import euclidean dist = euclidean([1, 2], [4, 6]) print(dist) ``` #### 8. **tensorboard** TensorBoard 是 PyTorch 集成的一个日志记录工具,允许开发者监控训练过程中的指标变化情况[^9]。 ```bash pip install tensorboard ``` --- ### 总结 以上列举的是 YOLOv5 正常运作所需的关键第三方包集合。每项都有特定职责范围内的贡献,共同保障整个项目顺利实施完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值