dp的优化可能是自己的弱项吧

F1中n*n*n的复杂度强行过去了 

F2就无能为力了;

状态转移

dp[ i ] [ j ] 第一个i存的是位置  1-n;    j是放入数字的个数   然后F1就暴力过去了

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=+;
int dp[maxn][maxn];
int a[maxn];
int32_t main()
{
int n,k,x; cin>>n>>k>>x;
for(int i=;i<=n;i++) cin>>a[i];
dp[][]=;
for(int i=;i<=n;i++)
{
//cout<<" "<<i<<endl;
//cout<<" "<<i-k+1<<endl;
for(int j=i-k;j<i;j++)
{
if(j<) continue;
for(int q=(i-)/k;q<x;q++)
{
if(dp[j][q]||i<=k) dp[i][q+]=max(dp[i][q+],dp[j][q]+a[i]);
}
} }
int maxn=;
for(int i=n;i>=n-k+;i--)
{
maxn=max(dp[i][x],maxn);
}
if(maxn) cout<<maxn<<endl;
else cout<<-<<endl;
}

暴力的F1

然后F2  gg了

看了别人的代码  大致有几种写法

双端队列优化   deque<pair<int,int> >  de[maxn];

写的不难懂点   de[  ]  [  ]  [   ]  大致就是这样存的  de[ ] 这个表示的是 存的数字个数  第二个括号存的是 第i个位置j个数的最大值; 第三个括号存的是  位置 

第i个位置是由 前[ i-k,i-1 ]位置的地方转移过来的;

从  de[j]  到 de[j+1]   必须确定  de[j+1] 已经转移了  所以第二层转移就是   j=x-1; j>=0;j--;

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=5e3+;
int a[maxn];
deque<pair<int,int> > de[maxn];
int32_t main()
{
//priority_queue(int,vector<int>,greater<int>) qu;
int n,k,x; cin>>n>>k>>x;
for(int i=;i<=n;i++) cin>>a[i];
int ans=-;
de[].push_back({,}) ; // first  cun zhi second pos;
for(int i=;i<=n;i++)
{
for(int j=x-;j>=;j--)
{
while(!de[j].empty() && de[j].front().second<i-k ) de[j].pop_front(); // i-k
if(de[j].empty()) continue;
int val=de[j].front().first+a[i]; // jia shang zhe ge shu
while(!de[j+].empty() && de[j+].back().first <=val ) de[j+].pop_back();
de[j+].push_back({val,i}); // di i ge wei zhi j+1 ge shu he zui da
if(j+==x&&i+k>n)
{
ans=max(val,ans);
}
}
}
cout<<ans<<endl; }

看的懂的代码

dp 优化 F2. Pictures with Kittens (hard version)的更多相关文章

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

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

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

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

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

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

  4. 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 ...

  5. NOIP2015 子串 (DP+优化)

    子串 (substring.cpp/c/pas) [问题描述] 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个 互不重 叠 的非空子串,然后把这 k 个子串按照其在字 ...

  6. LCIS tyvj1071 DP优化

    思路: f[i][j]表示n1串第i个与n2串第j个且以j结尾的LCIS长度. 很好想的一个DP. 然后难点是优化.这道题也算是用到了DP优化的一个经典类型吧. 可以这样说,这类DP优化的起因是发现重 ...

  7. 取数字(dp优化)

    取数字(dp优化) 给定n个整数\(a_i\),你需要从中选取若干个数,使得它们的和是m的倍数.问有多少种方案.有多个询问,每次询问一个的m对应的答案. \(1\le n\le 200000,1\le ...

  8. dp优化1——sgq(单调队列)

    该文是对dp的提高(并非是dp入门,dp入门者请先参考其他文章) 有时候dp的复杂度也有点大...会被卡. 这几次blog大多数会讲dp优化. 回归noip2017PJT4.(题目可以自己去百度).就 ...

  9. loj6171/bzoj4899 记忆的轮廊(期望dp+优化)

    题目: https://loj.ac/problem/6171 分析: 设dp[i][j]表示从第i个点出发(正确节点),还可以有j个存档点(在i点使用一个存档机会),走到终点n的期望步数 那么 a[ ...

随机推荐

  1. 逆袭之旅DAY16.东软实训.Oracle.索引

    2018-07-12 14:44:27 四.索引1.创建索引手动创建:create index 索引名 on 表名(列名,[列名,...])create table employee(pno numb ...

  2. day03 基本数据类型

    1.什么是数据类型 变量值即我们 存放的数据 ,数据类型及变量值的类型 2.变量值为何要区分类型 因为变量值使用记录现实世界中事物的特征,针对不同的特征就应该用不同类型的值去标识 3.如何应用数据类型 ...

  3. S2 深入.NET和C#编程 机试测试错题积累

    机试第一题:                              //创建文件流(路径 模式) FileStream fa = new FileStream(@"D:\\S2第一次全文 ...

  4. 区分舍入函数fix/round/ceil/floor

    1)fix(n)的意义是取小于n的整数(是向零点舍入的意思是往零的方向上靠),这是一类应用在整数取值上的函数,就如同以前我们所研究的求整问题: 例如:fix(pi)=3 ; fix(3.5)=3;  ...

  5. Core Java 面经

    1  面向对象的特征有哪些方面? (1)抽象,抽象就是忽略与当前目标无关的部分,抽象包含两个方面,一是过程抽象,一是数据 (2)继承,是Java中允许和鼓励类重用的思想的体现,, 它提供了一种方式,可 ...

  6. SharePoint REST API - 列表和列表项

    博客地址:http://blog.csdn.net/FoxDave 本篇主要讲述如何用SharePoint REST操作列表和列表项.阅读本篇时请先了解前面讲述的REST介绍和基本操作. 废话不多 ...

  7. tf多线程读取数据

    多线程读取数据的机制 tf中多线程读取数据跟常规的python多线程思路一致,是基于Queue的多线程编程. 主线程读取数据,然后计算,在读数据这部分有两个线程,一个线程读取文件名,生成文件名队列,另 ...

  8. 牛客oi测试赛 二 B 路径数量

    题目描述 给出一个 n * n 的邻接矩阵A. A是一个01矩阵 . A[i][j]=1表示i号点和j号点之间有长度为1的边直接相连. 求出从 1 号点 到 n 号点长度为k的路径的数目. 输入描述: ...

  9. AVD Manager 模拟器使用

    一.模拟器配置 1.双击启动AVD Manager,进入配置界面 2.点Create按钮创建 3.配置模拟器基本信息 --AVD Name:设备名称,自己定义一个,用英文(不要用中文) --Devic ...

  10. Ubuntu配置静态IP

    1. 输入命令:sudo vi /etc/network/interfaces 编辑文件: auto lo iface lo inet loopback auto eth0 iface eth0 in ...