B

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描写叙述

有n块地板排成一条直线,从左到右编号为1,2,3. . . n-1,n,每块地板上有一个权值w。如今要小B用这n块地板玩一个游戏。
小B能够选择随意一块地板作为起点,然后向右跳K次,每次最多能够跳5个格子(设起跳点地板编号为x,落地点为y,y-x <= 5)。每踩在一块地板上,小B的得分sum += wi
,小B每次仅仅能踩一块地板,開始时sum = 0。如今请你编写一个程序求最大的sum。

输入

多组输入.第一行输入两个整数n,k。(1<= n && n <= 100 ,1 <= k && k <= min(n,50))。
接下来n行,每行一个整数,依次表示Wi。(0  <= wi && wi <= 100)。

输出

每组数据输出一个整数,代表答案。

演示样例输入

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 || 记忆化搜索)的更多相关文章

  1. 【bzoj5123】[Lydsy12月赛]线段树的匹配 树形dp+记忆化搜索

    题目描述 求一棵 $[1,n]$ 的线段树的最大匹配数目与方案数. $n\le 10^{18}$ 题解 树形dp+记忆化搜索 设 $f[l][r]$ 表示根节点为 $[l,r]$ 的线段树,匹配选择根 ...

  2. 【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索

    [题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先 ...

  3. [题解](树形dp/记忆化搜索)luogu_P1040_加分二叉树

    树形dp/记忆化搜索 首先可以看出树形dp,因为第一个问题并不需要知道子树的样子, 然而第二个输出前序遍历,必须知道每个子树的根节点,需要在树形dp过程中记录,递归输出 那么如何求最大加分树——根据中 ...

  4. poj1664 dp记忆化搜索

    http://poj.org/problem?id=1664 Description 把M个相同的苹果放在N个相同的盘子里,同意有的盘子空着不放,问共同拥有多少种不同的分法?(用K表示)5.1.1和1 ...

  5. 状压DP+记忆化搜索 UVA 1252 Twenty Questions

    题目传送门 /* 题意:给出一系列的01字符串,问最少要问几个问题(列)能把它们区分出来 状态DP+记忆化搜索:dp[s1][s2]表示问题集合为s1.答案对错集合为s2时,还要问几次才能区分出来 若 ...

  6. 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. ...

  7. POJ 1088 DP=记忆化搜索

    话说DP=记忆化搜索这句话真不是虚的. 面对这道题目,题意很简单,但是DP的时候,方向分为四个,这个时候用递推就好难写了,你很难得到当前状态的前一个真实状态,这个时候记忆化搜索就派上用场啦! 通过对四 ...

  8. zoj 3644(dp + 记忆化搜索)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 思路:dp[i][j]表示当前节点在i,分数为j的路径条数,从 ...

  9. loj 1044(dp+记忆化搜索)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26764 思路:dp[pos]表示0-pos这段字符串最少分割的回文 ...

随机推荐

  1. Eddy's爱好(dfs+容斥)

    Eddy's爱好 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  2. js模态窗口

    最近在看js,正好公司用的框架中用到了模态窗口,以前没有接触过,现在把模态窗口的用法先记下来. 常用的浏览器chrome,Firefox,ie11,这三种分别支持document.open(),win ...

  3. Ural 1450 求最长路 SPFA

    题意就是求S点到T点的有向无环图中的最长路. 用SPFA可以解决. 一开始一直RE的原因 QAQ 竟然是在开Edge 邻接表的时候开小了 改了一下4Y #include <stdio.h> ...

  4. java代码中获取进程process id(转)

    另一方面,线程ID=进程ID+内部线程对象ID并不成立,    参考: blog.csdn.net/heyetina/article/details/6633901     如何在java代码中获取进 ...

  5. matlab绘图方法汇总

    Matlab画图 强大的画图功能是Matlab的特点之中的一个,Matlab提供了一系列的画图函数,用户不须要过多的考虑画图的细节,仅仅须要给出一些基本參数就能得到所需图形,这类函数称为高层画图函数. ...

  6. visual c++ 2010安装未成功

    可能是已经安装了其他版本的Microsoft visual studio 参考: http://answers.microsoft.com/zh-hans/windows/forum/windows_ ...

  7. 结构体中使用#define定义宏

    struct  hostent {   char    *h_name;        /* official name of host */   char    **h_aliases;    /* ...

  8. BZOJ 4143: [AMPPZ2014]The Lawyer( sort )

    水题... 排序搞出每天的会议有哪些, 然后再按照会议的开始时间和结束时间排序, 最晚开始的和最早结束的会议不是同一场而且最晚开始的时间>最早结束的会议就有可能方案 -------------- ...

  9. 四、Nginx负载均衡upstream

    user www; worker_processes ; error_log /usr/local/nginx/logs/error.log crit; pid /usr/local/nginx/lo ...

  10. Robot Framework与Web界面自动化测试学习笔记:简单例子

    假设环境已经搭建好了.这里用RIDE( Robot Framework Test Data Editor)工具来编写用例.下面我们对Robot Framework简称rf. 我们先考虑下一个最基本的登 ...