最近正儿八经的学习了dp,有一些题目非常明显看出来就是dp了
比如说:过河卒、方格取数、导弹拦截、加分二叉树、炮兵阵地
更加明显的还有:采药、装箱问题、过河、金明的预算方案。
今天来谈谈dp的dp在不在dp中(但在dp范畴)内的应用(简称dp的应用)
dp其实可以用贪心来优化,有些基本不可能的情况就可以直接省略了。
dp其实可以用数据结构来优化,取最大值最小值用堆。。。
dp其实不一定是dp,也可以是一种思想,的简称dp思想,
就是用前面的一个或者两个状态来推出现在状态的可能,解决一些问题有神效。
dp的空间基本上是n^2或者m^2(用滚存也是少数啊3转2其实也可以滚的啊)
如果看到n=1,000;m=1,000的数据范围就想到dp啦。
但是问题来了,不是每一题符合从前推到后且n,m比较小的题目就是dp。
但是用dp思想一定没错啦。。。
下面有个小例子来阐述一下p在不在dp中(但在dp范畴)内的应用(简称dp的应用)
【题目名称】游览(sightseeing.pas/c/cpp)
【题目描述】周末到了,gnocuil打算去逛游乐园。他所去的游乐园可以看做一个N*M的网格,每个网格上都是一个景点。游乐园的入口在(1,1),出口在(N,M)处。游乐园有一个不成文的规定:游览时,只能朝着坐标增大的方向走,因为如果坐标减小,会很不吉利。换句话说,每次只能向右方、正下方走。当然,只可以走到相邻的景点,不可以沿着斜线走。
对于走到的每个景点,gnocuil都会得到一个快乐度A[i,j]。同时,游览会使他疲倦,每个景点都会使他增加B[i,j]的疲劳度。
gnocuil认为,对于每次游览,用总快乐度除以总疲劳度,得到的就是这次游览的价值。请你设计一个方案,使得对于给定的游乐园信息,游览的价值最大。
【输入文件】第一行是两个整数N,M,表示游乐园的大小。
接下来N行每行M个正整数,表示这个景点的快乐度。
接下来N行每行M个正整数,表示这个经典的疲劳度。
【输出文件】只有一个实数,表示最大价值。精确到小数点后5位小数。
【输入样例】

2 2
1 2
1 1
1 1
2 1

【输出样例】

1.33333

【样例说明】只有两条线路:(1,1)->(1,2)->(2,2)的价值是(1+2+1)/(1+1+1)=1.33333,(1,1)->(2,1)->(2,2)的价值是(1+1+1)/(1+2+1)=0.75000。
【图】自己画啦。
现在我要阐述的是这题怎么用dp(思想)来解题。
首先,直接DP显然错误,因为(A1+A2)/(B1+B2)不可能被分解成A1/B1和A2/B2的形式。
一个反例见测试点2:
input#2

5 5
3 5 4 4 4
4 3 4 4 4
4 3 3 3 4
5 5 3 5 5
3 5 5 4 5
1 1 1 1 2
2 1 2 2 2
1 1 2 1 1
2 2 2 1 2
2 1 1 2 1

output#2

3.45454

这不是一个luo的坐标dp,如果不能dp,那还玩个毛线?(放弃)
其实我们仔细分析还是可以用dp的思路给出解答。
本题求的是:max(∑Ai/∑Bj)。设max (∑Ai/∑Bj)=k,即对于最优解, ∑Ai=k∑Bj
也就是Max k,k满足 ∑(Ai-kBj)=0;
换句话说,因为Ai和Bj是给定的,只要对于某个答案k,得到上式=0,就可以断定k是合法的答案。在此基础上求出最大的合法的k。
怎样确定答案k?
枚举!只需二分k,再进行判断即可。
二分k的过程中,如果k偏小,就会有 max(∑Ai/∑Bj)>k,也就是∑(Ai-kBj)>0 反之亦然。
也就是说我们每次二分答案的时候还是需要用到坐标dp的(套路深~~)
假设f[i,j]表示∑(Ai-kBj)的最大值(走到(i,j)时得到的价值的最大值)

 for i:= to n do
for j:= to m do
f[i,j]:=max(f[i-,j],f[i,j-])+a[i,j]-k*b[i,j];

这个状态转移真心不难啊!!!
然后就可以愉快的二分了。(注意double二分格式,最后输出l)

var n,m,i,j:longint;
f:array[..,..]of double;
a,b:array[..,..]of longint;
l,r,mid:double;
function max(a,b:double):double;
begin
if a>b then exit(a)
else exit(b);
end;
function pd(k:double):boolean;
var i,j:longint;
begin
for i:= to n do
for j:= to m do
f[i,j]:=max(f[i-,j],f[i,j-])+a[i,j]-k*b[i,j];
exit(f[n,m]>);
end;
begin
assign(input,'sightseeing.in');
assign(output,'sightseeing.out');
reset(input);
rewrite(output);
readln(n,m);
for i:= to n do
for j:= to m do
read(a[i,j]);
for i:= to n do
for j:= to m do
read(b[i,j]);
for i:= to n do f[i,]:=-1e300;
for j:= to m do f[,j]:=-1e300;
f[,]:=;
l:=; r:=;
while r-l>1e- do begin
mid:=(l+r)/;
if pd(mid)then l:=mid
else r:=mid;
end;
writeln(l::);
close(input);
close(output);
end.

dp乱写2:论dp在不在dp中(但在dp范畴)内的应用的更多相关文章

  1. dp乱写1:状态压缩dp(状压dp)炮兵阵地

    https://www.luogu.org/problem/show?pid=2704 题意: 炮兵在地图上的摆放位子只能在平地('P') 炮兵可以攻击上下左右各两格的格子: 而高原('H')上炮兵能 ...

  2. dp乱写3:环形区间dp(数字游戏)

    状态: fmax[i,j]//表示前i个数分成j个部分的最大值 fmin[i,j]//表示前i个数分成j个部分的最小值 边界:fmax[i,1]:=(sum[i] mod 10+10) mod 10( ...

  3. HDU 4640 状态压缩DP 未写完

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 解题思路: 首先用一个简单的2^n*n的dp可以求出一个人访问一个给定状态的最小花费,因为这i个 ...

  4. 【好好补题,因为没准题目还会再出第三遍!!】ACM字符串-组合数学(官方题解是数位DP来写)

    ACM字符串 .长度不能超过n .字符串中仅包含大写字母 .生成的字符串必须包含字符串“ACM”,ACM字符串要求连在一块! ok,是不是很简单?现在告诉你n的值,你来告诉我这样的字符串有多少个 输入 ...

  5. [BZOJ4011][HNOI2015]落忆枫音-[dp乱搞+拓扑排序]

    Description 传送门 Solution 假如我们的图为DAG图,总方案数ans为每个点的入度In相乘(不算1号点).(等同于在每个点的入边选一条边,最后一定构成一棵树). 然而如果加了边x- ...

  6. [CSP-S模拟测试]:军训队列(DP+乱搞)

    题目描述 有$n$名学生参加军训,军训的一大重要内容就是走队列,而一个队列的不规整程度是该队中最高的学生的身高与最矮的学生的身高差值的平方.现在要将$n$名参加军训的学生重新分成$k$个队列,每个队列 ...

  7. C语言--乱写C语言

    C语言的语法太枯燥了 换个写法   #include <stdio.h> #include<stdlib.h> #define end } #define if(x) if ( ...

  8. android中dx、dp、dip、sp单位的区别

    1.dp=dip 2.px基于像素,后两者基于像素密度. 3.px既可用于宽度高度,也可用于字体,dp用于宽高,sp用于字体4.android中以320*480屏幕为基准.在相同值的px和dp,在32 ...

  9. android: android中dip、dp、px、sp和屏幕密度

    android中dip.dp.px.sp和屏幕密度 转自:http://www.cnblogs.com/fbsk/archive/2011/10/17/2215539.html 1. dip: dev ...

随机推荐

  1. 1.5《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——清屏

    使用命令行时,使用clear命令清除屏幕非常方便: $ clear 键盘简写为^L.(Ctrl + L) 同样地,使用完终端当前窗口或标签页,使用exit命令退出进程: $ exit 键盘简写为^D ...

  2. 20155311《网络对抗》Web安全基础实践

    20155311<网络对抗>Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL ...

  3. 20155325 Exp2 后门原理与实践

    基础问答 例举你能想到的一个后门进入到你系统中的可能方式? 乱点链接 学电脑小白不正确配置电脑 下载非官网软件 例举你知道的后门如何启动起来(win及linux)的方式? 软件:ncat socat ...

  4. POJ1159

    这竟然是IOI虽然是2000年的,但其实也改变不了它水题的本质 我写了两种方法,这里都讲一下吧 考虑记忆化搜索,用f[i][j]表示当区间的左端为i,右端为j时最少要添加多少字符,所以ans就为f[1 ...

  5. Luogu P1113 杂务

    终于没有打模板题了. 一道简单的拓扑题目(但记得以前第一次做的时候爆0了). 发现这个做事的过程是按一定顺序的,然后如果一个工作的前面没有任何事情的话,它一定先被完成(如果不的话就不能使时间最小化,其 ...

  6. P问题,NP问题,NPC问题,NP-hard问题

    1.P问题:一个问题能找到一个在多项式时间里解决他的算法 多项式时间(o(1),o(lgn),o(n的a次方)) 非多项式时间 o(a的n次方)  o(n!) 2.NP问题:在多项式时间找不到问题的解 ...

  7. [LOJ#6066]. 「2017 山东一轮集训 Day3」第二题[二分+括号序列+hash]

    题意 题目链接 分析 首先二分,假设二分的答案为 \(mid\),然后考虑利用括号序列来表示树的形态. 点 \(u\) 的 \(k-\) 子树的括号序列表示实际上是刨去了 \(u\) 子树内若干个与 ...

  8. [BZOJ1135][POI2009]Lyz[霍尔定理+线段树]

    题意 题目链接 分析 这个二分图匹配模型直接建图的复杂度太高,考虑霍尔定理. 对于某些人组成的区间,我们只需要考虑他们的并是一段连续的区间的集合.更进一步地,我们考虑的人一定是连续的. 假设我们考虑的 ...

  9. [CF1010E]Store[kd-tree]

    题意 有一个长方体,不知道它的位置,给出 \(n\) 个一定在长方体内的点和 \(m\) 个一定不在的点,有 \(k\) 次询问,每次询问一个点是否 在.不在.不确定 在长方体内. \(n\leq 1 ...

  10. Asp.Net_上传文件(ftp、webClient、webService)

    第一种:通过FTP来上传文件 首先,在另外一台服务器上设置好FTP服务,并创建好允许上传的用户和密码,然后,在ASP.NET里就可以直接将文件上传到这台 FTP 服务器上了.代码如下: <%@ ...