[noip模拟]散步<dp>
题目链接:http://begin.lydsy.com/JudgeOnline/problem.php?id=2097
这题A的时候,百感交集五味杂陈。。。。。。。。。。。。
就这么一道看起来简单的不得了的裸的一件内衣都不剩的dp我就卡了几天
唉,看来我这种蒟蒻是没有救了。
看完题后,有些朋友可能会和我一样去定义一个数组f[i,j,l,r]表示第一个人在i,j位置,第二个人在l,r位置
然后一看n是小于等于100就放心大胆的继续码代码下去了
但实际上这东西如果单纯循环不仅仅会爆时间,还要爆内存(题坑)
这道题其实很简单,首先你画个图 可以发现,其实在每一步上,两个人的坐标和相等,而且坐标和是从2到n*2,刚刚好要走1到2*n-1步;
我们来写一下这个坐标和吧
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
好吧这就是坐标规律,及在第i步的时候我们应该在坐标和为i+1的点上 注:两人都在1,1这个起始点的时候我们就算成这是第一步
好了知道这个obvious的规律后,我们就可以简简单单的定义一个三维的数组了
我们定义f[k][i][j]表示在坐标和为k的位置上,第一个人的横坐标为i,第二个人的横坐标是j
(当然定义方式不止一种,我只是个人喜好这一种,另外一种定义是在第k步时,第一人的横坐标为i,第二人的横坐标为j)
定义出来了,这个状态转移就更简单了
我的定义对应的状态转移方程是:f[k][i][j]=max{f[k-1][i][j],f[k-1][i-1][j],f[k-1][i][j-1],f[k-1][i-1][j-1]}+abs(val[i][k-i]-val[j][k-j]);
然后我再提一下另一种方程的定义方案:f[k][i][j]=max{f[k-1][i][j],f[k-1][i-1][j],f[k-1][i][j-1],f[k-1][i-1][j-1]}+abs(val[i][k-i+1]-val[j][k-j+1]);
区别不大,只是在对应的纵坐标时有区别而已
然后这就是这道水出天际的题的解了
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstdlib>
#define maxn 105
using namespace std; int n,val[maxn][maxn],f[maxn*][maxn][maxn]; int ma(int a,int b,int c,int d)
{
return max(max(a,b),max(c,d));
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
scanf("%d",&val[i][j]);
f[][][]=;
for(int k=;k<=*n;k++)
for(int i=;i<k;i++)
for(int j=;j<k;j++)
{
int iy=k-i,jy=k-j;
f[k][i][j]=ma(f[k-][i-][j-],f[k-][i-][j],f[k-][i][j-],f[k-][i][j])+abs(val[i][iy]-val[j][jy]);
}
printf("%d",f[*n][n][n]); }
[noip模拟]散步<dp>的更多相关文章
- NOIP模拟 回文序列 - DP
题意: 如果一个字符串等于s和t的长度之和(\(l \le 50\)),并且可以拆成两个字符串子序列,分别与s和t相同,那么它就是s和t的一个并字符串(从字符串中选出若干个可以不连续的字符按照原序列写 ...
- 【noip模拟赛5】细菌 状压dp
[noip模拟赛5]细菌 描述 近期,农场出现了D(1<=D<=15)种细菌.John要从他的 N(1<=N<=1,000)头奶牛中尽可能多地选些产奶.但是如果选中的奶牛携 ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
- 2018.9.22 NOIP模拟赛
*注意:这套题目应版权方要求,不得公示题面. 从这里开始 Problem A 妹子 Problem B 旅程 Problem C 老大 因为业务水平下滑太严重,去和高一考NOIP模拟,sad... P ...
随机推荐
- 前端ps中常用的操作
昨天,ui给了个psd图,让写成网页.额,要自己切图.很久之前,操作的还凑乎.但是,好久了,都忘了.所以,打算自己记个笔记,方便以后查看. 首先,打开ps就先来设置一下ps的单位啦点击最上面的一行的编 ...
- js数组冒泡排序、快速排序、插入排序
1.冒泡排序 //第一种 function bubblesort(ary){ for(var i=0;i<ary.length-1;i++){ for(var j=0;j<ary.leng ...
- c语言之学生管理系统
0x00 学生管理系统 说到学生管理系统,对于每一个初学c语言的人都是一道不得不过的砍.不过,学习c,我觉得每个人都应该写一个学生管理系统,至于为什么,我想倘若连一个学生管理系统都写不好,哪么他的c是 ...
- 全面认识HBase架构(建议收藏)
在网上看过很多HBaes架构相关的文章,内容深浅不一,直到发现了一篇MapR官网的文章https://mapr.com/blog/in-depth-look-hbase-architecture/#. ...
- IOS手动添加的View 在代码中使用(自动布局)autoLayout
- (void)viewDidLoad { [super viewDidLoad]; UIButton *btnTest = [UIButton buttonWithType:UIButtonType ...
- oracle单机数据库搭建巨详细文档
规划 环境:redhat6.9 安装包:p13390677_112040_Linux-x86-64_1of7.zip p13390677_112040_Linux-x86-64_2of7.zip 数据 ...
- vue基础----修饰符,watch,computed,method实例方法
1.vue常用的修饰符,number,trim,number--->当作数字,trim-->去掉前后空格 2.methods与计算属性 computed 的相同与区别 <body&g ...
- CSS样式命名
CSS样式命名 说明网页公共命名#wrapper 页面外围控制整体布局宽度#container或#content 容器,用于最外层#layout 布局#head, #heade ...
- Python基础篇(四)_组合数据类型的基本概念
Python基础篇——组合数据类型的基本概念 集合类型:元素的集合,元素之间无序 序列类型:是一个元素向量,元素之间存在先后关系,通过序号进行访问,没有排他性,具体包括字符串类型.元组类型.列表类型 ...
- Natas14 Writeup(sql注入、sql万能密码)
Natas14: 是一个登录页面.源码如下. if(array_key_exists("username", $_REQUEST)) { $link = mysql_connect ...