题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3374

题目大意:JAVAMAN 到梦幻城市旅游见到了黄金树,黄金树上每天回结出金子。已经有n棵树,JAVAMAN要停留m天,每天只能砍掉一棵树,砍掉树后就能得到树上的黄金。给定n棵树上原有的黄金a[i]和每天可以新增加的黄金b[i],求他最多可以得到多少黄金。中途如果有1天不砍树的话,之后的日子久不能砍树,所有最好每天都砍树,或者直到树被砍完。

Sample Input

2
2 1
10 10
1 1
2 2
8 10
2 3

Sample Output

10
21

Hints:
Test case 1: JAVAMAN just cut tree 1 to get 10 gold coins at the first day.
Test case 2: JAVAMAN cut tree 1 at the first day and tree 2 at the second day to get 8 + 10 + 3 = 21 gold coins in all.

分析:凭借经验每天结果子越多的树越在最后砍,能得到最大收益。所以开始按照b[i]由小到大排序。

  令dp[i][j]表示在前 i 棵树中 j 天的最大收益,则答案为dp[n][m],很像背包。

代码如下:

 # include<iostream>
# include<cstdio>
# include<cstring>
# include<algorithm>
using namespace std; int n,m;
struct node
{
int a,b;
} s[];
int dp[][];
bool cmp(const node a,const node b)
{
return a.b < b.b;
} int main()
{
int T,i;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(i=; i<=n; i++)
scanf("%d",&s[i].a);
for(i=; i<=n; i++)
scanf("%d",&s[i].b);
sort(s+,s++n,cmp);
memset(dp,,sizeof(dp));
for(int i =; i<=n; i++)
{
for(int j=; j<=m; j++)
{
dp[i][j] = max(dp[i-][j],dp[i-][j-]+s[i].a+(j-)*s[i].b);
}
}
printf("%d\n",dp[n][m]);
}
return ;
}

这道题目最开始脑子里想的是记忆化搜索,却写成了DFS,结果当然超时。

 # include<iostream>
# include<cstdio>
# include<cstring>
using namespace std; int n,m,maxx;
int a[],b[],vis[]; void DP(int x,int y)
{
if(x > maxx)
maxx = x;
if(y > m)
return ;
int i;
for(i=; i<=n; i++)
{
if(vis[i]) continue;;
vis[i] = ;
DP(x+a[i]+(y-)*b[i],y+);
vis[i] = ;
}
}
int main()
{
int T,i;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(i=; i<=n; i++)
scanf("%d",&a[i]);
for(i=; i<=n; i++)
scanf("%d",&b[i]);
maxx = ;
DP(,);
printf("%d\n",maxx);
}
return ;
}

这里为什么混淆呢?总结以下几点

1.DFS和记忆化搜索都用到了新开的数组vis[]表示是否遍历过

2.DFS中会vis[i]=1表示走过,之后还会vis[i]=0还原回来,但是记忆化搜索没有这个回溯的过程

3.一般情况下,如果求n所对应的结果,DFS是从1开始,而记忆化搜索从结果开始,因为它只遍历一次

ZOJ 3211 Dream City(DP)的更多相关文章

  1. ZOJ 3211 Dream City(线性DP)

    Dream City Time Limit: 1 Second      Memory Limit: 32768 KB JAVAMAN is visiting Dream City and he se ...

  2. ZOJ 4027 Sequence Swapping(DP)题解

    题意:一串括号,每个括号代表一个值,当有相邻括号组成()时,可以交换他们两个并得到他们值的乘积,问你最大能得到多少 思路:DP题,注定想得掉头发. 显然一个左括号( 的最远交换距离由他右边的左括号的最 ...

  3. ZOJ 3211 Dream City DP 01背包 经典问题

    题目大意:JAVAMAN 到梦幻城市旅游见到了黄金树,黄金树上每天回结出金子.已经有n棵树,JAVAMAN要停留m天,每天只能砍掉一棵树,砍掉树后就能得到树上的黄金.给定n棵树上原有的黄金a[i]和每 ...

  4. ZOJ 2625 Rearrange Them(DP)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1625 题目大意:将n个数重新排列,使得每个数的前一个数都不能和之前的 ...

  5. ZOJ 2745 01-K Code(DP)(转)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1745 题目大意:一个串由N个字符组成,每个字符是‘0’或者是‘1’, ...

  6. ZOJ 1013 Great Equipment(DP)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=13 题目大意:说的是有三种不同的装备,分别是头盔,盔甲,战靴需要运输, ...

  7. ZOJ 2702 Unrhymable Rhymes(DP)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1702 题目大意:给定有很多数字组成的诗,譬如 “AABB”, “AB ...

  8. ZOJ 3211 Dream City

    贪心,$dp$. 假设我们知道要选择哪些物品,那么这些物品应该按什么顺序选择呢? 物品$A(a1,b1)$,物品$B(a2,b3)$. 假设物品$A$在第$x$天被选择,物品$B$在第$y$天被选择. ...

  9. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

随机推荐

  1. docker——Dockerfile创建镜像

    写在前面: 继续docker的学习,昨天用docker成功跑了tomcat,但是在centos中镜像跑的容器手动装jdk和tomcat,今天学习用Dockerfile创建镜像,并在上面搭建java环境 ...

  2. C++学习笔记(十三):类、包和接口

    看标题感觉这些术语和C++没有什么关系啊,包和接口是Java等语言加入的概念. 这篇文章是基于Java等语言的新概念(相对于C++来说的新概念)来看C++的设计思路. 类: C++中,一个文件可以包含 ...

  3. 海量Office文档搜索

    知识管理系统Data Solution研发日记之十 海量Office文档搜索   经过前面两篇文章的介绍,<分享制作精良的知识管理系统 博客备份程序 Site Rebuild>和<分 ...

  4. iOS开发-表视图的使用

    // // ViewController.m // Simple Table // // Created by Jierism on 16/7/20. // Copyright © 2016年 Jie ...

  5. 关于NoSQL数据库你应该知道的10件事

    关系数据库模型已经流行了几十年了,但是一种新类型的数据库——被称为NoSQL,正在引起企业的注意.下面是关于它的优势和劣势的一个概述.二十多年以来,对数据库管理来说,关系数据库(RDBMS)模型一直是 ...

  6. linux tomcat自启动设置

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  7. PostgreSQL的 create index concurrently

    对于PostgreSQL的 "create index concurrently". 我个人认为其中存在一个bug. 我的验证过程如下: 我有两个表,tab01和 tab02,这两 ...

  8. android常见错误-The container 'Android Dependencies' references non existing library

    The container 'Android Dependencies' references non existing library

  9. yum -------包安装库

    elrepo:   http://elrepo.org/tiki/tiki-index.php CentOSPlus:    http://wiki.centos.org/zh/AdditionalR ...

  10. node.js 针对不同的请求路径(url) 做出不同的响应

    边看这个边写的: http://wenku.baidu.com/link?url=C4yLe-TVH6060u_x4t34H3Ze8tjoL7HjJaKgH-TvHnEYl-T_gAMYwhmrCeM ...