P1614 爱与愁的心痛

题目背景

(本道题目隐藏了两首歌名,找找看哪~~~)

《爱与愁的故事第一弹·heartache》第一章。

《我为歌狂》当中伍思凯神曲《舞月光》居然没赢给萨顶顶,爱与愁大神心痛啊~~~而且最近还有一些令人伤心的事情,都让人心痛(最近真的很烦哈)……

题目描述

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

输入格式

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

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

输出格式

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

输入输出样例

输入 #1复制

8 3
1
4
7
3
1
2
4
3

输出 #1复制

6

说明/提示

解题思路

数据规模与约定
  • 对于 30% 的数据,保证 n≤20。
  • 对于 60%的数据,保证 n≤100。
  • 对于 90%的数据,保证 n≤10的三次方。
  • 对于 100%100% 的数据,保证 0≤m≤n≤3×10的三次方,1≤ai≤100。

本题要求找到连续m个刺痛值的和的最小值。为此,我们需要遍历数组中的所有可能的连续m个元素,并计算它们的和,然后找出这些和中的最小值。

首先,我们需要从用户那里接收两个整数nm,其中n是刺痛值的总数,m是要求连续和的元素个数。然后,我们接收n个刺痛值并存储在数组中。

接下来,我们遍历数组,对于每个可能的起始位置(从第1个元素到第n-m+1个元素),我们计算从这个位置开始的连续m个元素的和。在遍历过程中,我们记录并更新遇到的最小和。

示例代码

#include<bits/stdc++.h>  
using namespace std;  
  
int a[30001]; // 根据题目要求,数组大小至少为3*10^3+1  
  
int main() {  
    int n, m;  
    cin >> n >> m; // 读取n和m  
  
    for (int i = 1; i <= n; i++) {  
        cin >> a[i]; // 读取每个刺痛值并存储在数组中  
    }  
  
    int mi = INT_MAX; // 使用INT_MAX作为最小和的初始值  
    for (int i = 1; i <= n - m + 1; i++) { // 遍历所有可能的起始位置  
        int sum = 0;  
        for (int j = 0; j < m; j++) { // 计算连续m个刺痛值的和  
            sum += a[i + j]; // 注意数组索引从1开始,但循环从0开始,因此这里使用i+j  
        }  
        if (sum < mi) { // 如果当前和小于已知的最小和,则更新最小和  
            mi = sum;  
        }  
    }  
  
    cout << mi << endl; // 输出连续m个刺痛值的和的最小值  
    return 0;  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值