寻找蒙德大陆最宝贵的宝藏

描述

在蒙德大陆的一次探险中,你和你的队伍发现了一系列的宝藏和陷阱,每个宝藏或陷阱都有其价值,可以为正(宝藏)也可以为负(陷阱)。现在,你的任务是找出一连串(连续)宝藏中总价值最大的一组。

例如,你的队伍发现了这样一系列宝藏和陷阱的价值:(6, -1, 5, 4, -7)。在这个序列中,最大总价值的宝藏组合为6 + (-1) + 5 + 4 = 14。

输入

首先输入一个整数T(1 <= T <= 20),代表探险的次数。接着是T组数据,每组数据的开始是一个整数N(1 <= N <= 100000),代表这次探险中发现的宝藏和陷阱的数量,然后是N个整数,代表每个宝藏或陷阱的价值(所有价值都在-1000到1000之间)。

输出

对于每次探险,输出两行。第一行是 "Case #:",#表示探险的编号。第二行包含三个整数,表示这次探险中找到的最大总价值的宝藏组合的总价值,以及这个组合在序列中的起始位置和结束位置。如果有多个组合的总价值相同,输出第一个找到的组合。每两个探险的输出之间有一个空行。

输入样例:
复制代码
2
5 6 -1 5 4 -7
7 0 6 -1 1 -6 7 -5
输出样例:
复制代码
Case 1:
14 1 4

Case 2:
7 1 6
解题思路:

动态规划:

设数组fi用于记录以原数组中的元素arri结尾的连续串的最大值,在从前向后遍历的过程中,有两种可能,fi=arri或者 fi=fi-1+arri,遍历的同时记录f数组中出现的最大值,当arri>fi-1+arri时,更新起点的位置;当fi>M(已经出现的最大值)时,更新终点的位置

代码实现:

cpp 复制代码
#include<iostream>
#include<stdio.h>
using namespace std;
int f[100005]={0};//f[i]记录考虑1~i且包含i的连续串的最大值

int dp(int n,int* arr,int* s1,int *s2)
{
    f[0]=arr[0];
    int M=0,tail=0,beg=0,pos=0;
    for(int i=1;i<n;i++)
    {
        int t=arr[i]+f[i-1];
        //f[i]=max(arr[i],t);
        if(arr[i]>t)
        {
            f[i]=arr[i];
            pos=i;
        }
        else f[i]=t;
        if(f[i]>M)
        {
            M=f[i];
            beg=pos;
            tail=i;
        }
    }
    *s1=beg,*s2=tail;
    return M;
}
int main()
{
    int T;
    cin>>T;
    for(int i=1;i<=T;i++)
    {
        int n;
        scanf("%d",&n);
        int *arr=new int[n];
        for(int i=0;i<n;i++)
        {
            scanf("%d",&arr[i]);
        }
        int head=0,tail=0;
        int res=dp(n,arr,&head,&tail);
        cout<<"Case "<<i<<":"<<endl;
        cout<<res<<" "<<head+1<<" "<<tail+1<<endl;
        delete[] arr;
        if(i!=T)cout<<endl;
    }
    return 0;
}
相关推荐
人工智能培训7 小时前
知识图谱:结构化表达实体与关系的知识组织技术
大数据·人工智能·算法·重构·生活·知识图谱
地平线开发者8 小时前
QAT 实战:从 PyTorch 模型到 J6E 实板精度与延时验证
pytorch·算法·自动驾驶
IT星宿8 小时前
github-gravity:用 Rapier2D 把 GitHub 贡献图做成 SVG 物理动画
算法·github
♡すぎ♡8 小时前
SWE 的基本条件
算法·swe·浅水模拟
郝学胜-神的一滴10 小时前
AI 编程智能体 17:四步搞定专属AI智能体
大数据·人工智能·python·神经网络·算法·langchain·强化学习
微尘hjx10 小时前
【StrongSort 03】多轨迹算法StrongSort改进点
人工智能·算法·yolo·视觉检测·ultralytics·strongsort·轨迹算法
梦帮科技10 小时前
QML-04-QGraph-Diff:量子非欧图扩散生成模型与 SE(3) 等变分子晶格逆向合成完整技术指南(上部分)
人工智能·算法·自动化·量子计算·傅里叶分析
七牛开发者10 小时前
TokenGate:端到端可训练的 Token 剪枝机制,让大模型 Prefill 提速 11.3 倍
算法·机器学习·剪枝·长上下文·tokengate
牧瀬クリスだ12 小时前
Redis Hash实战:高效存储对象与购物车
java·数据库·redis·算法·哈希算法