基础简单DP
状态比较容易表示,转移方程比较好想,问题比较基本常见 递推、背包、LIS(最长递增序列),LCS(最长公共子序列)
HDU 2048 数塔
由上往下推 状态数太多(100!) 可以由下往上推:
dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+dp[i][j])
储存的话就直接一个二维数组a[110][110]
HDU2018 母牛
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
斐波那契数列 递推 线性递归
dp[i]=dp[i-1]+dp[i-3];
HDU2044 一只小蜜蜂
斐波那契数列 递推 线性递归
先发现 n(n>=3)可由n-1及n-2到达 所以递推得到到达n的方法是到达n-1的方法+到达n-2的方法
HDU2050 折线分割平面
①n条直线能把平面分成几部分: 2+2+3+4......递推公式 f(n)=f(n-1)+n
②一个圆与n条直线 这些直线中每一条在圆内同其他直线相交,假设没有3条直线相交于一点,试问这些直线将圆分成多少区域:
与①相同
现在看下本题 平面的部分数与顶点即直线的交点有关 n=1时有2条线1个交点 部分为2 n=2时有3有4条线6个交点部分为7 所以n=n-1时有 2*(n-1)条线所以n=n时可增加2*2*(n-1)+1(本身的顶点)个部分
即递推公式为 f(n)=f(n-1)+4*(n-1)+1;
codeforces 429B B. Working out
先处理出从左上到右下的最大值和左下到右上的最大值然后枚举交点和进出的方向
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int dp1[][],dp2[][],dp3[][],dp4[][];
int ans[][];
//(1,1)->(i,j)+(i,j)->(n,m)+(n,1)->(i,j)+(i,j)->(1,m);
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
scanf("%d",&ans[i][j]);
}
}
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
dp1[i][j]=max(dp1[i-][j],dp1[i][j-])+ans[i][j];
}
}
for(int i=n;i>=;i--){
for(int j=m;j>=;j--){
dp2[i][j]=max(dp2[i+][j],dp2[i][j+])+ans[i][j];
}
}
for(int i=;i<=n;i++){
for(int j=m;j>=;j--){
dp3[i][j]=max(dp3[i-][j],dp3[i][j+])+ans[i][j];
}
}
for(int i=n;i>=;i--){
for(int j=;j<=m;j++){
dp4[i][j]=max(dp4[i][j-],dp4[i+][j])+ans[i][j];
}
}
int cnt=;
for(int i=;i<n;i++){
for(int j=;j<m;j++){
cnt=max(cnt,dp1[i-][j]+dp2[i+][j]+dp3[i][j+]+dp4[i][j-]);
cnt=max(cnt,dp1[i][j-]+dp2[i][j+]+dp3[i-][j]+dp4[i+][j]);
}
}
printf("%d\n",cnt);
return ;
}
基础简单DP的更多相关文章
- [Usaco2008 Mar]River Crossing渡河问题[简单DP]
Description Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏. 由于奶牛不会划船,在整个渡河过程中,F ...
- 『简单dp测试题解』
这一次组织了一场\(dp\)的专项考试,出了好几道经典的简单\(dp\)套路题,特开一篇博客写一下题解. Tower(双向dp) Description 信大家都写过数字三角形问题,题目很简单求最大化 ...
- 简单dp总结
### 简单dp总结 本文是阅读<挑战程序设计第二版>其中关于dp章节所作总结.将简要描述dp的部分知识. 一.dp是什么? dp在计算机专业学科中全称是动态规划(dynamic prog ...
- 关于一些基础的dp——硬币的那些事(dp的基本引入)
1.最少硬币问题大体题意: 有n种硬币,面值分别是v1,v2......vn,数量无限,输入一个非负整数s,选用硬币使其和为s,要求输出最少的硬币组合. 我们可以这样分析: 定义一个名为Min[s]的 ...
- HDU 1087 简单dp,求递增子序列使和最大
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- Codeforces Round #260 (Div. 1) A. Boredom (简单dp)
题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少. ...
- codeforces Gym 100500H A. Potion of Immortality 简单DP
Problem H. ICPC QuestTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/a ...
- 简单dp --- HDU1248寒冰王座
题目链接 这道题也是简单dp里面的一种经典类型,递推式就是dp[i] = min(dp[i-150], dp[i-200], dp[i-350]) 代码如下: #include<iostream ...
- poj2385 简单DP
J - 简单dp Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:65536KB 64bit ...
随机推荐
- 《精通并发与Netty》学习笔记(02 - 服务端程序编写)
上节我们介绍了开发netty项目所必需的开发环境及工具的使用,这节我们来写第一个netty项目 开发步骤 第一步:打开https://search.maven.org 找到netty依赖库 第二步:打 ...
- TP5之事务处理
事务: 执行完A事件然后执行B事件,AB事件都执行完才算完成.可是有时候由于某些因素,A事件执行完,还没来得及执行B事件.怎么办?就需要回到A事件执行前.这种事情多见于电商支付功能. mysql事务要 ...
- 【转帖】Windows与Linux系统下的库介绍
Windows与Linux系统下的库介绍 http://embeddedlinux.org.cn/emb-linux/entry-level/200903/12-553.html 库的定义 库文件是一 ...
- mybatis报错无法扫描到xml文件
错误:java.io.IOException: Could not find resource com/xxx/xxxMapper.xml 原因:target目录下没有***.xml文件 解决方法:在 ...
- dubbo分布式服务框架-study1
本文参考“如何给老婆解释RPC”一文进行的... 1.首先了解下dubbo: dubbo是一款高性能.轻量级的开源java RPC服务框架(RPC即远程过程调用,具体解释见:https://www.j ...
- php用逗号格式化数字
今日工作需要格式化数字显示当前商品价格,比如2335.32,需要格式化为2,335.32这样显示.我写了一个函数.总感觉这么简单的功能,但是却需要30多行代码来完成. <?php/**** * ...
- 3d长方体
html <div class="main"> <div class="a1">1</div> <div class= ...
- Python编程之注释
一.注释 当你把变量理解透了,你就已经进入了编程的世界.随着学习的深入,用不了多久,你就可以写复杂的上千甚至上万行的代码啦,有些代码你花了很久写出来,过了些天再回去看,发现竟然看不懂了,这太正常了. ...
- Redis分布式锁解决抢购问题
转:https://segmentfault.com/a/1190000011421467 废话不多说,首先分享一个业务场景-抢购.一个典型的高并发问题,所需的最关键字段就是库存,在高并发的情况下每次 ...
- Lua访问网页
示例 例子,实现https方式,登录网站,访问某个网页,修改其中参数的功能.其中xx应用时候需要修改. require("curl") local ipList = { " ...