G - Pictures with Kittens (easy version) dp
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的更多相关文章
- Codeforces 1077F1 Pictures with Kittens (easy version)(DP)
题目链接:Pictures with Kittens (easy version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:$dp[i][j ...
- 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 ...
- Codeforces Round #672 (Div. 2) C1. Pokémon Army (easy version) (DP)
题意:给你一组数\(a\),构造一个它的子序列\(b\),然后再求\(b_1-b2+b3-b4...\),问构造后的结果最大是多少. 题解:线性DP.我们用\(dp1[i]\)来表示在\(i\)位置, ...
- Codeforces 1077F2 Pictures with Kittens (hard version)(DP+单调队列优化)
题目链接:Pictures with Kittens (hard version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:数据量5000, ...
- C1. Pokémon Army (easy version) 解析(DP)
Codeforce 1420 C1. Pokémon Army (easy version) 解析(DP) 今天我們來看看CF1420C1 題目連結 題目 對於一個數列\(a\),選若干個數字,求al ...
- Codeforces 1077 F2 - Pictures with Kittens (hard version)
F2 - Pictures with Kittens (hard version) 思路: 单调队列优化dp 代码: #pragma GCC optimize(2) #pragma GCC optim ...
- 2016级算法第六次上机-B.ModricWang's FFT : EASY VERSION
1114 ModricWang's FFT EASY VERSION 思路 利用FFT做大整数乘法,实际上是把大整数变成多项式,然后做多项式乘法. 例如,对于\(1234\),改写成\(f(x)=1* ...
- Saving James Bond - Easy Version (MOOC)
06-图2 Saving James Bond - Easy Version (25 分) This time let us consider the situation in the movie & ...
- 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 ...
随机推荐
- 支持向量机SVM推导
样本(\(x_{i}\),\(y_{i}\))个数为\(m\): \[\{x_{1},x_{2},x_{3}...x_{m}\} \] \[\{y_{1},y_{2},y_{3}...y_{m}\} ...
- SpringCloud入门(十): Config 统一配置中心
SpringCloud Config 简介 在分布式系统中,由于服务组件过多,为了方便争对不通的环境下的服务配置文件统一管理,实时更新,所以出现了分布式配置中心组件.市面上开源的配置中心有很多,360 ...
- Shellshock远程命令注入(CVE-2014-6271)漏洞复现
请勿用于非法用法,本帖仅为学习记录 shelshocke简介: shellshock即unix 系统下的bash shell的一个漏洞,Bash 4.3以及之前的版本在处理某些构造的环境变量时存在安全 ...
- ApiPost V3创事记:一个痛并快乐着的创业故事
前言 无论是对于国家,还是对于我们个人,2020年4月,是注定是一个不同往年的4月.一场突如起来的疫情打破了我们原来的生活曲线,让我们知道了什么是苦难,什么是团结,什么是坚持,什么是胜利. 一.大幕开 ...
- 推荐一个小而美的Python代码格式化工具
代码可读性是评判代码质量的标准之一,有一个衡量代码质量的标准是 Martin 提出的 “WFT” 定律,即每分钟爆出 “WTF” 的次数.你在读别人代码或者做 Code Review 的时候有没有 “ ...
- Java 网络编程 --基于UDP实现一对一聊天功能
UDP 基本流程: UDP发送端基本流程: 1.使用DatagramSocket 指定端口 创建发送端 2.准备数据 一定转成字节数组 3. 封装成DatagramPacket 包裹,需要指定目的地 ...
- 5. 配置项:rule_files
prometheus配置文件内容: global: # 默认情况下抓取目标的频率. [ scrape_interval: <duration> | default = 1m ] # 抓取超 ...
- 2019-2020-1 20199326《Linux内核原理与分析》第七周作业
实验内容:分析Linux内核创建一个新进程的过程 初始化Menu Os,输入fork可以看到menuos触发了一个fork系统调用 再开一个shell,进入调试模式,设置几个断点sys_clone,d ...
- webug3.0靶场渗透基础Day_2(完)
第八关: 管理员每天晚上十点上线 这题我没看懂什么意思,网上搜索到就是用bp生成一个poc让管理员点击,最简单的CSRF,这里就不多讲了,网上的教程很多. 第九关: 能不能从我到百度那边去? 构造下面 ...
- CRS-0184 Cannot communicate with the CRS daemon
事件背景 rman清理脚本异常.导致磁盘空间爆满(一个环境变量没有设置正确) 释放磁盘空间,进行rman清理 之后,领导把实例重启,但是ams实例没有关闭 环境 系统 : AIX 数据库: Oracl ...