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. Pandownload作者被抓之后

    近日,pandownload作者被抓,可以说是圈内的大事件,被抓之后, Pandownload 已经是打不开,用不了了 就在我为此感到惋惜的时候,竟然有出来个shengdownload 先来一块看看这 ...

  2. 【Java】InnerClass 内部类

    Java 允许一个类的定义位于另一个类的内部,前者为内部类,后者称为外部类 InnerClass一般定义它的类或语句块之中外部类引用时必须给出完整的名称 成员内部类 & 局部内部类 - 静态成 ...

  3. L10机器

    机器翻译和数据集 机器翻译(MT):将一段文本从一种语言自动翻译为另一种语言,用神经网络解决这个问题通常称为神经机器翻译(NMT). 主要特征:输出是单词序列而不是单个单词. 输出序列的长度可能与源序 ...

  4. 数据结构与算法--二分搜索(binary search)

    前言 之前面试准备秋招,重新翻起了<编程之美>.在第三章节看到了一道关于二分搜索的讨论,觉得有许多细节是自己之前也没怎么特别注意地方,比如二分搜索的初始条件,转化.终止条件之类的. 问题 ...

  5. Python - 和我聊Python节目最新一期介绍 - 257期:使用超级电脑,Python,射电天文学知识来探索银河系

    今天,给大家简单介绍和我聊Python的最新一期节目,第257期:使用超级电脑,Python,射电天文学知识来探索银河系. 听着标题就觉得高大上,是的,我也是这么认为的.这次请的嘉宾来头很大,来自国际 ...

  6. gin请求数据校验

    前言 最近优化gin+vue的前后端分离项目代码时候,发现代码中对请求数据的校验比较繁琐,于是想办法简化它.最终我发现了go-playground/validator开源库很好用. 优化前代码 代码如 ...

  7. [Asp.Net Core] Blazor Server Side 扩展用途 - 配合CEF来制作客户端浏览器软件

    前言 大家用过微信PC端吧? 这是用浏览器做的. 用过Visual Studio Code吧? 也是用浏览器做的. 听说, 暴雪客户端也包含浏览器核心?? 在客户端启动一个浏览器, 并不是什么难事了. ...

  8. python学习笔记(五)---函数与类

    函数 def为定义函数的一个标志 demo1: def greet_user(username): print("Hello, " + username.title() + &qu ...

  9. java list随机截取(洗牌)

    public void solution(){ List<Integer> givenList = Arrays.asList(1, 2, 3,4,5,6); Collections.sh ...

  10. markdownPad常用功能示例

    1.列表 无序列表 姓名 张三 李四 王五 有序列表 张三 李四 王五 2.超链接 百度 3.引用 锄禾日当午,汗滴禾下土.谁知盘中餐,粒粒皆辛苦. -- 李绅<古风二首> 4.简要修饰文 ...