UVALive 6848 Fishing(dp)
题意:
R∗C的鱼塘,R,C≤100,多次操作,每次操作两种类型 R*C的鱼塘, R,C\leq 100, 多次操作, 每次操作两种类型
第一种为(a,b),(c,d),第二种为(x,y),第一种操作的两个减去,第二种操作的一个加上 第一种为(a, b), (c,d),第二种为(x,y), 第一种操作的两个减去, 第二种操作的一个加上
定于元组严格小于为a<c,b<d.操作限制条件为,比如两次操作: 定于元组严格小于为a
(a,b),(c,d),(x,y);(a′,b′),(c′,d′),(x′,y′);须保证(a,b)<(c,d)<(a′,b′)<(c′,d′)且(x,y)<(x′,y′) (a, b), (c,d),(x,y); (a', b'), (c',d'),(x',y'); 须保证(a,b)
不同类型的操作没有关系,求最大收益 不同类型的操作没有关系, 求最大收益
分析:
赤果果的dp 赤果果的dp
考虑状态maxv[i][j][k]:=(1,1)到(i,j)选择k个格子的最大获利,minv[i][j][k]:=最小获利 考虑状态maxv[i][j][k]:=(1,1)到(i,j)选择k个格子的最大获利, minv[i][j][k]:= 最小获利
转移先拷贝之前的状态 转移先拷贝之前的状态
maxv[i][j][k]=max(maxv[i−1][j][k],maxv[i][j−1][k]) maxv[i][j][k] = max(maxv[i-1][j][k],maxv[i][j-1][k])
选择(i,j)这个格子的话,maxv[i][j][k]=max(maxv[i][j][k],maxv[i−1][j−1][k−1]+a[i][j]) 选择(i,j)这个格子的话, maxv[i][j][k]=max(maxv[i][j][k], maxv[i-1][j-1][k-1] + a[i][j])
minv转移同理 minv转移同理
代码:
//
// Created by TaoSama on 2015-12-11
// Copyright (c) 2015 TaoSama. All rights reserved.
//
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <algorithm>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <string>
#include <set>
#include <vector>using namespace std;
#define pr(x) cout << #x << " = " << x << " "
#define prln(x) cout << #x << " = " << x << endl
const int N = 1e2 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;int n, m, a[N][N];
int maxv[N][N][N], minv[N][N][N];inline void getMax(int &x, int y) {x = max(x, y);
}inline void getMin(int &x, int y) {x = min(x, y);
}int main() {
#ifdef LOCALfreopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin);
// freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout);
#endifios_base::sync_with_stdio(0);int t; scanf("%d", &t);while(t--) {scanf("%d%d", &n, &m);for(int i = 1; i <= n; ++i)for(int j = 1; j <= m; ++j)scanf("%d", &a[i][j]);memset(minv, 0x3f, sizeof minv);memset(maxv, 0, sizeof maxv);for(int i = 0; i <= n; ++i)maxv[i][0][0] = minv[i][0][0] = 0;for(int i = 0; i <= m; ++i)maxv[0][i][0] = minv[0][i][0] = 0;for(int i = 1; i <= n; ++i) {for(int j = 1; j <= m; ++j) {for(int k = 1; k <= min(n, m); ++k) {getMin(minv[i][j][k], min(minv[i - 1][j][k], minv[i][j - 1][k]));getMin(minv[i][j][k], minv[i - 1][j - 1][k - 1] + a[i][j]);getMax(maxv[i][j][k], max(maxv[i - 1][j][k], maxv[i][j - 1][k]));getMax(maxv[i][j][k], maxv[i - 1][j - 1][k - 1] + a[i][j]);}}}int ans = 0;for(int i = 1; i <= min(n, m) >> 1; ++i)getMax(ans, maxv[n][m][i] - minv[n][m][i << 1]);printf("%d\n", ans);}return 0;
}
UVALive 6848 Fishing(dp)相关推荐
- 【UVALive 7505】Hungry Game of Ants(DP)
[UVALive 7505]Hungry Game of Ants(DP) 题目大意: 一条链上n只蚂蚁,第i只蚂蚁的weight为i.每只蚂蚁会选择一个初始方向,向左或向右.两只蚂蚁相遇时,大体重的 ...
- 求三角形最大面积(DP)
求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...
- LeetCode 编辑距离 II(DP)
1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...
- LeetCode 1220. 统计元音字母序列的数目(DP)
文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...
- LeetCode 265. 粉刷房子 II(DP)
文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...
- LeetCode 256. 粉刷房子(DP)
文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...
- LeetCode 1223. 掷骰子模拟(DP)
1. 题目 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始 ...
- LeetCode 1155. 掷骰子的N种方法(DP)
1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...
- LeetCode 1139. 最大的以 1 为边界的正方形(DP)
1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量.如果不存在,则返回 0. 示例 1: 输入:grid ...
最新文章
- IANA定义的常见服务的端口号列表
- C#中保存Gif文件设置透明无效果
- 电气工程及其自动化专业英语苏小林翻译_“万千星光 智能点亮” 电气工程及其自动化专业讲座...
- linux mysql 主从数据库_linux mysql数据库的主从配置
- 数据库表设计索引外键设计_关于索引的设计决策 数据库管理系统
- 树莓派服务器证书,【原创】在树莓派3上给Nginx部署免费HTTPS证书
- zookeeper之学习(三)zkcli补充
- 用JS让文章内容指定的关键字加亮
- 第三章 动态规划-基于模型的RL-强化学习理论学习与代码实现(强化学习导论第二版)
- 1 Kubernetes快速入门
- SpringIOC控制反转之XML配置
- Linux 重命名文件和文件夹
- Bluedroid 函数分析:BTA_GATTC_Open
- 动态改变Input和Textarea值Vue数据没有绑定的解决办法
- mysql server has fone away
- 电商营销策略介绍,电商营销手段有哪些
- 数据同步工具—SeaTunnel简介
- Vue.js 技术揭秘
- 基于java的学生宿舍公寓管理系统
- Tagoram: Real-Time Tracking of Mobile RFID Tags to High Precision Using COTS Devices