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. thinkphp 常用的查询

    php 常用的数据库查询方式: //根据where 条件查询,使用select()方法 访问:http://localhost/thinkphp2/index.php/Machine/search_i ...

  2. 最长回文串(manacher算法)

    ; ; int p[N]; char str[LEN], tmp[N]; //p[i]表示以str[i]为中心的回文往右延伸的 最长长度 void manacher(char* str, int* p ...

  3. java多线程制作计时器

    基本思路: 在类中创建thread 供按钮监听器调用. 界面设计:

  4. H264解码的一个測试程序

    网上看到的一个H264视频格式的解码測试程序,能够用来參考其逻辑流程. 代码例如以下: Test_Display_H264(){      in_fd = open(H264_INPUT_FILE, ...

  5. hdu 1232 畅通project

    题目: 链接:点击打开链接 算法: 赤裸裸的并查集. 代码: #include<iostream> #include<cstdio> #include<cstring&g ...

  6. [ArcGIS必打补丁]ArcGIS 10.1 SP1 for (Desktop, Engine, Server) Quality Improvement Patch

    大家都知道假设希望保证企业级GIS系统的稳定执行,除了使用最新的ArcGIS版本号产品以外,还须要打上相关的补丁. 补丁分为:Service Pack和Patch 比如,假设你使用的ArcGIS10. ...

  7. WAMP多站点配置,更改服务器端口

    修改apache.conf的配置文件 设置保存路径 原本的路径:DocumentRoot "D:/wamp/www/" 修改为自己定义的路径:D:\all_code\php 查询: ...

  8. 【JavaScript】标签样式中多出了element.style

    是因为使用了js增加或修改了样式.

  9. java排序方法中的选择排序方法

    每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完. package array; //选择排序方法 public class arra ...

  10. Codeforces Round #260 (Div. 2)C. Boredom(dp)

    C. Boredom time limit per test 1 second memory limit per test 256 megabytes input standard input out ...