SDUT 2893-B(DP || 记忆化搜索)
B
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描写叙述
输入
输出
演示样例输入
10 1
0 0 0 10 1 2 3 4 5 6
演示样例输出
15
卡了两天了。。倒是一看就是dp可解,大体状态也表示好了,但死活没推出状态转移方程。看了一下标程,顿感自己萨比了。。
dp[i][j] 代表跳j次能够到达i处(i为数组下标) 可得
dp[i][j]=max(dp[i][j],dp[i-k][j-1])(k∈[1,min(i,5)]);注意边界。。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <set>
#include <cmath>
#include <map>
#include <stack>
#define ll long long
using namespace std;
const int INF=0x3f3f3f3f;
int n,k,a[110],dp[110][55];
int main()
{
while(scanf("%d%d",&n,&k)!=EOF)
{
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
dp[i][0]=a[i];
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=min(i,5);j++)
{
for(int tk=1;tk<=k;tk++)
dp[i][tk]=max(dp[i][tk],dp[i-j][tk-1]+a[i]);
}
}
int ans=-INF;
for(int i=1;i<=n;i++)
ans=max(ans,dp[i][k]);
printf("%d\n",ans);
}
return 0;
}看了标程写的记忆化搜索,感觉记忆化也没那么神奇了,曾经从来没了解过QAQ。。我的理解是:找出状态数组,当你推不出来状态转移方程的时候,记忆化搜索也许不失为一种解决方式。前提是要有把搜索过程中的数据保存起来的思想,盲目的暴搜是不能解决这个问题的。。会T到没盆友的我深有体会。。#include <iostream>
#include <cstdio>
#include <algorithm>
#include <set>
#include <cctype>
#include <cstring>
#include <string>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
#define ll long long
const int maxn=110;
const int INF=0x3f3f3f3f;
int a[maxn],n,kk,tem,ans;
int dp[maxn][55];
int dfs(int s,int k)
{
if(dp[s][k]!=-1)
return dp[s][k];
dp[s][k]=a[s];
int tem=0;
if(k)
{
for(int i=1;i<=5&&i+s<n;i++)
tem=max(tem,dfs(i+s,k-1));
}
dp[s][k]+=tem;
return dp[s][k];
}
int main()
{
while(scanf("%d%d",&n,&kk)!=EOF)
{
memset(dp,-1,sizeof(dp));
for(int i=0;i<n;i++)
scanf("%d",a+i);
ans=-INF;
for(int i=0;i<n;i++)
{
ans=max(dfs(i,kk),ans);
}
printf("%d\n",ans);
}
return 0;
}
</pre><pre>
SDUT 2893-B(DP || 记忆化搜索)的更多相关文章
- 【bzoj5123】[Lydsy12月赛]线段树的匹配 树形dp+记忆化搜索
题目描述 求一棵 $[1,n]$ 的线段树的最大匹配数目与方案数. $n\le 10^{18}$ 题解 树形dp+记忆化搜索 设 $f[l][r]$ 表示根节点为 $[l,r]$ 的线段树,匹配选择根 ...
- 【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索
[题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先 ...
- [题解](树形dp/记忆化搜索)luogu_P1040_加分二叉树
树形dp/记忆化搜索 首先可以看出树形dp,因为第一个问题并不需要知道子树的样子, 然而第二个输出前序遍历,必须知道每个子树的根节点,需要在树形dp过程中记录,递归输出 那么如何求最大加分树——根据中 ...
- poj1664 dp记忆化搜索
http://poj.org/problem?id=1664 Description 把M个相同的苹果放在N个相同的盘子里,同意有的盘子空着不放,问共同拥有多少种不同的分法?(用K表示)5.1.1和1 ...
- 状压DP+记忆化搜索 UVA 1252 Twenty Questions
题目传送门 /* 题意:给出一系列的01字符串,问最少要问几个问题(列)能把它们区分出来 状态DP+记忆化搜索:dp[s1][s2]表示问题集合为s1.答案对错集合为s2时,还要问几次才能区分出来 若 ...
- ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2017)- K. Poor Ramzi -dp+记忆化搜索
ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2017)- K. ...
- POJ 1088 DP=记忆化搜索
话说DP=记忆化搜索这句话真不是虚的. 面对这道题目,题意很简单,但是DP的时候,方向分为四个,这个时候用递推就好难写了,你很难得到当前状态的前一个真实状态,这个时候记忆化搜索就派上用场啦! 通过对四 ...
- zoj 3644(dp + 记忆化搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 思路:dp[i][j]表示当前节点在i,分数为j的路径条数,从 ...
- loj 1044(dp+记忆化搜索)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26764 思路:dp[pos]表示0-pos这段字符串最少分割的回文 ...
随机推荐
- vijos 1115 火星人
说了那么多.事实上就是遍历全排列 #include<iostream> #include<cstdio> #include<algorithm> #include& ...
- 一次搞定cocos2d-x的 Android.mk 文件
cocos2d-x 打 android 包时要修改 Android.mk 文件,但每次修改很麻烦,如果源文件很多的话就坑死了,也可以写一个脚本来自动生成这个文件,但每次还要重新生成一下,将其修改下面的 ...
- 我写的一个 Qt 显示图片的控件
Qt 中没有专门显示图片的控件.通常我们会使用QLabel来显示图片.可是QLabel 显示图片的能力还是有点弱.比方不支持图像的缩放一类的功能.使用起来不是非常方便. 因此我就自己写了个简单的类. ...
- Android百度地图之显示地图
添加地图显示 一.在百度官网下载相关的SDK (网址:http://developer.baidu.com/map/sdkandev-download.htm) 解压下载好的BaiduMap_Andr ...
- Dijkstra、Dij + heap、Floyd、SPFA、 SPFA + SLF Template
Dijkstra in Adjacency matrix : int Dijkstra(int src,int tec, int n){ ]; ]; memset(done,,sizeof(done) ...
- QT5.6所开放的7个新模块(图表,虚拟键盘,性能分析,静态分析,测试正好,2D渲染)
The modules newly available to open source users are: Qt Charts Qt Data Visualization Qt Virtual Key ...
- Python 2.7 学习笔记 面向对象的编程
python是一种面向对象的语言.本文介绍如何用python进行面向对象的编程. 首先我们说下对象和类,类是一种类型的定义,对象是类的实例. 一.内置对象类型(内置类) 其实我们前面已经大量用到了对象 ...
- 引用 U-boot给kernel传参数和kernel读取参数—struct tag
引用 清风徐徐 的 U-boot给kernel传参数和kernel读取参数—struct tag U-boot会给Linux Kernel传递很多参数,如:串口,RAM,videofb等.而Linux ...
- c语言指针数组与数组指针
一.指针数组和数组指针的内存布局初学者总是分不出指针数组与数组指针的区别.其实很好理解:指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定.它是“储存指针的数组”的简称.数 ...
- php函数参数
函数的参数 通过参数列表可以传递信息到函数,即以逗号作为分隔符的表达式列表.参数是从左向右求值的. PHP 支持按值传递参数(默认),通过引用传递参数以及默认参数.也支持可变长度参数列表,更多信息参见 ...