Codeforces1304F.Animal Observation
分析一下得知是DP问题,时间复杂度符合,设dp[i][j]为从第i天开始,第j个位置能得到的最大值,其有三种转移状态
1.与上一天的选择有重合
2.与上一天的选择没有重合,且上一天的选择在左边
3.与上一天的选择没有重合,且上一天的选择在右边
那么得到转移方程,
1.dp[i][j] = max(dp[i-1][x])(x+k-1与j+k-1有交点)-重复部分
2.dp[i][j] = max(dp[i-1][x])(x+k-1在j的左边)+该次选择得到的数
3.同2
我们预处理前缀和,再在每次dp更新后为下一天的dp更新每个点左边的最大值,复杂度为O(nmk)
#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) ((x)&(-x))
typedef long long LL; const int maxn = ;
const int maxm = 2e4+; int dp[maxn][maxm], C[maxn][maxm], lmax[maxn][maxm], rmax[maxn][maxm]; int getsum(int i, int p1, int p2) {
return C[i][p2] - C[i][p1-];
} void run_case() {
int n, m, k, val;
cin >> n >> m >> k;
for(int i = ; i <= n; ++i)
for(int j = ; j <= m; ++j) {
cin >> val;
C[i][j] = C[i][j-] + val;
}
for(int i = ; i <= n; ++i) {
for(int j = ; j <= m - k + ; ++j) {
val = getsum(i, j, j+k-) + getsum(i+, j, j+k-);
if(i == ) {
dp[i][j] = val;
continue;
}
int mx = ;
// intersect part
for(int l = max(, j-k+); l <= min(m-k+, j+k-); ++l)
mx = max(mx, dp[i-][l]+val-getsum(i, max(l, j), min(j+k-,l+k-)));
dp[i][j] = mx;
if(j > k) dp[i][j] = max(dp[i][j], lmax[i-][j-k]+val);
if(j + k <= m - k + ) dp[i][j] = max(dp[i][j], rmax[i-][j+k]+val);
}
for(int j = ; j <= m-k+; ++j) lmax[i][j] = max(dp[i][j], lmax[i][j-]);
for(int j = m-k+; j >= ; --j) rmax[i][j] = max(dp[i][j], rmax[i][j+]);
}
cout << *max_element(dp[n]+, dp[n]++m) << "\n";
} int main() {
ios::sync_with_stdio(false), cin.tie();
//cout.setf(ios_base::showpoint);cout.precision(10);
//int t; cin >> t;
//while(t--)
run_case();
cout.flush();
return ;
}
hard vision就是将k的范围扩大很多,可以用线段树O(nmlogm)或者是单调队列O(nm)来优化区间最值问题,以后再补
Codeforces1304F.Animal Observation的更多相关文章
- Codeforces Round #620 F2. Animal Observation (hard version) (dp + 线段树)
Codeforces Round #620 F2. Animal Observation (hard version) (dp + 线段树) 题目链接 题意 给定一个nm的矩阵,每行取2k的矩阵,求总 ...
- 1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP
1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP 题意 用摄像机观察动物,有两个摄像机,一个可以放在奇数天,一个可以放在偶数天.摄像机在 ...
- Codeforces 1304F2 Animal Observation (hard version) 代码(dp滑动窗口线段树区间更新优化)
https://codeforces.com/contest/1304/problem/F2 #include<bits/stdc++.h> using namespace std; ; ...
- [CF1304F] Animal Observation - dp,单调队列
设 \(f[i][j]\) 为第 \(i\) 天在第 \(j\) 个位置放置的最大值,设 \(s[i][j]\) 是第 \(i\) 行的前缀和,则 \[ \begin{align} f[i][j] & ...
- Codeforces 1304F1/F2 Animal Observation(单调队列优化 dp)
easy 题目链接 & hard 题目链接 给出一张 \(n \times m\) 的矩阵,每个格子上面有一个数,你要在每行选出一个点 \((i,t)\),并覆盖左上角为 \((i,t)\), ...
- Codeforces Round #620 (Div. 2) A-F代码 (暂无记录题解)
A. Two Rabbits (手速题) #include<bits/stdc++.h> using namespace std; typedef long long ll; int ma ...
- Codeforces 杂题集 2.0
记录一些没有写在其他随笔中的 Codeforces 杂题, 以 Problemset 题号排序 1326D2 - Prefix-Suffix Palindrome (Hard version) ...
- 2021record
2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...
- 非Animal呢?为何不写个万用类
/*4.非Animal呢?为何不写个万用类 * 类Object是JAVA里多有类的源头/父类*/ import java.util.*; class Animalb{ String name; voi ...
随机推荐
- PAT 1010 Radix (二分)
Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The an ...
- netty(二)---客户端连接
概述 先了解一下 netty 大概框架图 ,可以看到客户端的创建和服务端最大的区别 - 服务端传入两个 EventLoopGroup,客户端传入一个 EventLoopGroup - channel ...
- IMDB-TOP_250-爬虫
这个小学期Python大作业搞了个获取IMDB TOP 250电影全部信息的爬虫.第二次写爬虫,比在暑假集训时写的熟练多了.欢迎大家评论. ''' ************************** ...
- JS-try/catch方法判断字符串是否为json格式
定义: try/catch 语句用于处理代码中可能出现的错误信息,出现异常会导致程序崩溃,而try/catch 则可以保证程序的正常运行. try { //执行代码 不报错则 正常执行 不会进入下面的 ...
- 服务器(1)——IIS(1)——Windows7中IIS简单安装与配置(详细图解)
最近工作需要IIS,自己的电脑又是Windows7系统,找了下安装的方法,已经安装成功. 一.首先是安装IIS.打开控制面板,找到“程序与功能”,点进去 二.点击左侧“打开或关闭Windows功能” ...
- node环境下:node_modules里面的文件
node环境下:node_modules里面的文件 package.json来制定名单,需要哪些npm包来参与到项目中来,npm install命令根据这个配置文件增减来管理本地的安装包. depen ...
- mpvue路由传参报错Cannot read property 'query' of undefined
在mpvue编写的小程序项目中,页面跳转间我希望通过编程式导航传递些参数 传参页面代码: this.$router.push({path:'/pages/login/changePassword/ma ...
- Thread线程
1.什么是线程? 线程( Thread ) 被称作轻量级进程( Lightweight Process ),线程是比进程更小一级的执行单元. 一个进程可以有多个线程,但至少有一个线程(当进程被初始化后 ...
- DMVPN基础配置
DMVPN基础拓扑: 配置步骤: 1. 基本IP地址配置实现网络可达 2. 配置GRE多点隧道(mGRE)和NHRP(下一跳解析协议) 3. 配置EIGRP路由协议 4. 配置 ...
- 【原】Django问题总结
一:python manage.py makemigrations No changes detected 在修改了models.py后,有些用户会喜欢用python manage.py makemi ...