题解:洛谷 P1614 爱与愁的心痛

【题目来源】

洛谷:P1614 爱与愁的心痛 - 洛谷

【题目描述】

最近有 \(n\) 个不爽的事,每句话都有一个正整数刺痛值(心理承受力极差)。爱与愁大神想知道连续 \(m\) 个刺痛值的和的最小值是多少,但是由于业务繁忙,爱与愁大神只好请你编个程序告诉他。

【输入】

第一行有两个用空格隔开的整数,分别代表 \(n\)\(m\)

\(2\) 到第 \((n+1)\) 行,每行一个整数,第 \((i+1)\) 行的整数 \(a_i\) 代表第 \(i\) 件事的刺痛值 \(a_i\)

【输出】

输出一行一个整数,表示连续 \(m\) 个刺痛值的和的最小值是多少。

【输入样例】

8 3
1
4
7
3
1
2
4
3

【输出样例】

6

【算法标签】

《洛谷 P1614 爱与愁的心痛》 #模拟# #贪心# #枚举# #洛谷原创#

【代码详解】

#include <bits/stdc++.h>  // 包含标准库头文件(万能头文件)
using namespace std;      // 使用标准命名空间

int a[3000];             // 定义全局数组:存储输入的数字序列

int main()
{
    int n, m;            // 定义变量:n-数字总数,m-子序列长度
    int i, j;            // 定义循环变量
    int sum = 0;         // 定义变量:当前子序列的和
    int min = 2147483647;// 定义变量:最小子序列和,初始为最大整数值
  
    cin >> n >> m;       // 输入数字总数和子序列长度
  
    // 输入数字序列
    for (int i = 0; i < n; i++) 
    {
        cin >> a[i];
    }
  
    // 特殊情况处理:当子序列长度等于总长度时
    if (m == n) 
    {
        // 直接计算整个序列的和
        for (i = 0; i < n; i++) 
        {
            sum += a[i];
        }
        min = sum;       // 整个序列的和就是最小值
    }
    else 
    {
        // 常规情况:遍历所有可能的子序列
        for (i = 0; i <= n - m; i++) 
        {
            sum = 0;     // 重置当前子序列和
          
            // 计算当前子序列的和
            for (j = i; j < i + m; j++) 
            {
                sum += a[j];
            }
          
            // 更新最小子序列和
            if (sum < min) 
                min = sum;
        }
    }
  
    cout << min;         // 输出最小子序列和
  
    return 0;            // 程序正常结束
}

【运行结果】

8 3
1
4
7
3
1
2
4
3
6
posted @ 2026-02-16 15:46  团爸讲算法  阅读(1)  评论(0)    收藏  举报