https://codeforces.com/problemset/problem/1077/F1

这个其实是一个比较简单的dp了

题目大意:

给你n个数,让你从n个数里选出x个数,并且每隔k个至少选一个数。

开始不知道怎么去写,也不知道怎么去定义dp

这个应该是对于dp不是特别的熟练,实际上dp用途很广,而且可以用到的地方很多,效果也很好。

这种时候就应该大胆一点,你需要什么,想达成什么效果那就去这样定义。

这个题目,我们希望dp可以帮我们解决前面n个数,选了x个数的最大和,而且这个还必须每隔k就选择了一个数。

这个是大问题,子问题是什么呢?

如果我们选第i个数,那么前面n-1个数,选了x-1个数的最大和。。。。

否则就是我们不选第i个数,那么前面n-1个数,选了x个数的最大和。  ----这种情况我们最多可以向前面推k-1次

所以我们要怎么定义呢?

首先要有一维来记录到第几个数了,还有一维就是要记录我们选了多少个了,

两维记录可以唯一确定每一个状态,所以两维就够了

那到底怎么去定义这个dp呢?dp的含义是什么呢?

这个我觉得不是很好想。

dp[i][j]表示前面i个数,已经选了j个数的最大和吗?

但是因为这个有区间限制,就是每隔k就必须有一个数,所以这个时候我们就要确定前面的那个值的位置,

所以我们就定义为已经选择了第i个数,前面i个数 选了j个数的最大和。

状态定义好了之后,就是转移方程的确定了。

dp[i][j]=max(dp[i][j],dp[s][j-1]+a[i])

这个s其实就是i往前推,然后去最大值,所以需要三维。

而且这个往前推最多推k个数。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <algorithm>
#include <vector>
#include <iostream>
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
const int maxn = ;
typedef long long ll;
ll dp[ * maxn][ * maxn];
ll a[maxn]; int main()
{
int n, k, x;
scanf("%d%d%d", &n, &k, &x);
for (int i = ; i <= n; i++) scanf("%lld", &a[i]);
for(int i=;i<=n;i++)
{
for(int j=;j<=x;j++)
{
dp[i][j] = -inf;
}
}
dp[][] = ;
for(int i=;i<=n;i++)
{
for(int j=;j<=x;j++)
{
for(int h=;h<=k&&h<=i;h++)
{
if (dp[i - h][j - ] == -inf) continue;
dp[i][j] = max(dp[i][j], dp[i - h][j - ] + a[i]);
// printf("dp[%d][%d]=%lld\n", i, j, dp[i][j]);
}
}
}
ll ans = -inf;
for (int i = n - k + ; i <= n; i++) ans = max(ans, dp[i][x]);
if (ans < ) printf("-1\n");
else printf("%lld\n", ans);
return ;
}

线性dp

G - Pictures with Kittens (easy version) dp的更多相关文章

  1. Codeforces 1077F1 Pictures with Kittens (easy version)(DP)

    题目链接:Pictures with Kittens (easy version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:$dp[i][j ...

  2. Codeforces Round #521 (Div. 3) F1. Pictures with Kittens (easy version)

    F1. Pictures with Kittens (easy version) 题目链接:https://codeforces.com/contest/1077/problem/F1 题意: 给出n ...

  3. Codeforces Round #672 (Div. 2) C1. Pokémon Army (easy version) (DP)

    题意:给你一组数\(a\),构造一个它的子序列\(b\),然后再求\(b_1-b2+b3-b4...\),问构造后的结果最大是多少. 题解:线性DP.我们用\(dp1[i]\)来表示在\(i\)位置, ...

  4. Codeforces 1077F2 Pictures with Kittens (hard version)(DP+单调队列优化)

    题目链接:Pictures with Kittens (hard version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:数据量5000, ...

  5. C1. Pokémon Army (easy version) 解析(DP)

    Codeforce 1420 C1. Pokémon Army (easy version) 解析(DP) 今天我們來看看CF1420C1 題目連結 題目 對於一個數列\(a\),選若干個數字,求al ...

  6. Codeforces 1077 F2 - Pictures with Kittens (hard version)

    F2 - Pictures with Kittens (hard version) 思路: 单调队列优化dp 代码: #pragma GCC optimize(2) #pragma GCC optim ...

  7. 2016级算法第六次上机-B.ModricWang's FFT : EASY VERSION

    1114 ModricWang's FFT EASY VERSION 思路 利用FFT做大整数乘法,实际上是把大整数变成多项式,然后做多项式乘法. 例如,对于\(1234\),改写成\(f(x)=1* ...

  8. Saving James Bond - Easy Version (MOOC)

    06-图2 Saving James Bond - Easy Version (25 分) This time let us consider the situation in the movie & ...

  9. Saving James Bond - Easy Version 原创 2017年11月23日 13:07:33

    06-图2 Saving James Bond - Easy Version(25 分) This time let us consider the situation in the movie &q ...

随机推荐

  1. 游戏开服 报一些 ip 设置 数据格式的异常,但断点明明都是数字 没问题的

    游戏服开始起服,结果报乱七八招的错误,先  ccs 那 ip 有问题,我给直接注释掉了:然后又 报 KeyValueDictCache 中 ips 设置有问题,都是报格式错误,结果我断点明明都是数字结 ...

  2. 使用d3.js的时候,如何用zoom translate scale限制拖拽范围

    红色代表需要改写的代码 1.添加定义图像大小和容器的大小及坐标 d3.behavior.zoom = function () { var moveCanvas={ width: , height: , ...

  3. ModuleNotFoundError: No module named 'sklearn.cross_validation'

    本文为CSDN博主「不服输的南瓜」的原创文章,遵循 CC 4.0 BY-SA 版权协议 原文链接 ModuleNotFoundError: No module named 'sklearn.cross ...

  4. week homework: 大家来找茬

    上周课程主题为用户体验,每位同学也根据自己使用APP的体验,例举出一些手机或电脑客户端软件的bug或用户体验非常不好的地方: Tianfu: GitHub.com:界面不够直观,有许多功能不知道入口在 ...

  5. ajax ★ ★ ★ ★ ★

    ajax 1   定义:  是创建交互式应用的网页交互技术 2    特点:无刷新.异步 3  中介数据类型: 1)  XML - 可扩展的标记语言                          ...

  6. Upload-Labs 实验操作记录

    0x01 安装 下载:https://github.com/c0ny1/upload-labs 环境:简单搭建phpstudy环境即可,记得在upload-labs根目录下创建该文件夹 0x02 文件 ...

  7. 一年时间,Pipenv就成为Python官方推荐的顶级工具?

    Pipenv是Kenneth Reitz在一年多前创建的“面向程序员的Python开发工作流程”,现在已成为管理软件包依赖关系的Python官方推荐资源. Python软件包安装管理的简要历史 为了正 ...

  8. Scala学习系列(三)——入门与基础

    本课程源码共享于 https://github.com/tree1123/learning-scala 首先,打开IDEA编辑器的SbtExampleProject项目,我们将在这个项目下进行练习 本 ...

  9. Java 学习线路图

    学习是一个循序渐进的过程,是一件非常难得坚持的事情.如果真的想学Java,一定要下定决心! 这里我分享给你的Java学习线路图,希望对你有帮助,以下为2020年更新版本,黑马君在2020年更新了Jav ...

  10. python爬虫+正则表达式实例爬取豆瓣Top250的图片

    直接上全部代码 新手上路代码风格可能不太好 import requests import re from fake_useragent import UserAgent #### 用来伪造爬头部信息 ...