poj 1976 A Mini Locomotive(0/1背包)

简介: 点击打开链接poj 1976 思路: 0/1背包 分析: 1 题目给定n个数,要求三段连续的m个数之和最大 2 假设n个数是num[1],num[2],num[3].

点击打开链接poj 1976

思路: 0/1背包
分析:
1 题目给定n个数,要求三段连续的m个数之和最大
2 假设n个数是num[1],num[2],num[3]......num[n],那么m个连续的数可能有n-m+1种可能即num[1]+num[2]...+num[k] , num[2]+num[3]...+num[k]......
3 我们令v[1] = num[1]+num[2]...+num[k] , v[2] = num[2]+num[3]...+num[k].那么总的有n-m+1个物品每个体积为1,那么我们令dp[i][j]表示的是前i个物品放入容量为j的背包的最大值,背包的总容量为3.
那么dp[i][j]的转移方程很好写出
i >= m , dp[i][j] = max(dp[i-1][j] , dp[i-m][j-1]+v[i]);
i < m , dp[i][j] = max(dp[i-1][j] , v[i]);
怎么理解这个转移方程呢?原因就是因为这边由于每个物品是m个连续的数,所以说我们在取了第i个物品的时候很明显前面的m个物品不能取(因为数字是不能重复的)。当i < m的时候,很明显就是要么不取第i个,如果要取就是直接的v[i]。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int MAXN = 50010;

int n , m , num[MAXN];
int v[MAXN] , dp[MAXN][4]; 

int solve(){
    int sum;
    for(int i = 1 ; i <= n-m+1 ; i++){
        sum = 0;
        for(int j = i ; j <= i+m-1 ; j++)
            sum += num[j];
        v[i] = sum;
    }
    memset(dp , 0 , sizeof(dp));
    for(int i = 1 ; i <= n-m+1 ; i++){
        for(int j = 3 ; j >= 1 ; j--){
            if(i >= m)
                dp[i][j] = max(dp[i-1][j] , dp[i-m][j-1]+v[i]);
            else
                dp[i][j] = max(dp[i-1][j] , v[i]); 
        }
    }
    return dp[n-m+1][3]; 
}

int main(){
    int Case;
    scanf("%d" , &Case);
    while(Case--){
         scanf("%d" , &n); 
         for(int i = 1 ; i <= n ; i++)
             scanf("%d" , &num[i]);
         scanf("%d" , &m);
         printf("%d\n" , solve()); 
    }
    return 0;
}



目录
相关文章
|
数据库 数据安全/隐私保护 Android开发
微信聊天记录导出为电脑txt文件教程
本文的最终目的是将手机微信的聊天记录导出到电脑里,变成txt文本文件,然后对其进行分析。 网上有一些工具也可以完成这个功能,但是基本都是付费的。手动操作的话,找了很多的博客,基本没有完全有效的。最终找到一篇很靠谱的教程:传送门,本文基本参考这篇进行整理。首先上我的github把所有需要的文件下载下来:https://github.com/godweiyang/wechat-explore,用法稍后说明。
3825 0
微信聊天记录导出为电脑txt文件教程
|
人工智能 搜索推荐
影视与游戏行业AI视频制作实战:第二步,为角色生成个性化语音
每个角色有自己的性格、形象,那也一定需要自己个性化的声音。
|
存储 监控 算法
Aliware打造史上最强时序数据库,HiTSDB每秒写入时序数据达1000万!
近日,Aliware对外正式发布HiTSDB高性能时序数据库。HiTSDB引入了高效压缩算法,能够将每个数据点的平均内存开销压缩到2字节以下,并且支持最高每秒1000 万的时序数据点写入,同时可以通过“预降精度”的方式,将业务精度的数据在入库的过程中计算完成,提升查询的效率。
9215 97
|
JavaScript 前端开发 测试技术
详解前端如何突破refer验证
详解前端如何突破refer验证
1021 0
详解前端如何突破refer验证
|
边缘计算 运维 负载均衡
MOSN 反向通道详解
本文主要介绍之前新合入 master 分支的「反向通道」的使用场景和设计原理,欢迎大家留言探讨。
|
Prometheus 监控 Cloud Native
从监控到隔离,阿里云容器服务提升您的GPU资源使用体验
通过使用阿里云容器服务的GPU支持,可以提升GPU资源管理的可见性,了解到需要多少的GPU资源可以支撑图像识别,语音识别,在线翻译等业务,如何能用最少的成本满足业务需求;而可以在无需修改现有GPU程序的前提下,保障多个容器共享同一个GPU时,实现彼此互相隔离。
2796 0
从监控到隔离,阿里云容器服务提升您的GPU资源使用体验
|
机器人 atlas 传感器
会后空翻的机器人、会开门的机器狗:揭秘波士顿动力Atlas&Spot
波士顿动力公司的仿生机器人令人瞠目结舌的敏捷性和动物般的反应能力,似乎一直无人能及。其最新的双足机器人可以在山上跋涉,越过障碍物,甚至像体操运动员一样腾空跳跃。不可否认的是他们的吸引力:每次波士顿动力公司在YouTube上传一个新视频,它都会迅速获得数百万的观看量。它们就是可以称之为网络明星的第一批机器人。
2752 0
会后空翻的机器人、会开门的机器狗:揭秘波士顿动力Atlas&Spot
|
安全 数据安全/隐私保护 网络虚拟化
|
安全 API 数据安全/隐私保护
Web APi之认证(Authentication)两种实现方式【二】(十三)
原文:Web APi之认证(Authentication)两种实现方式【二】(十三) 前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话。
1532 0