OpenJudge 2773 2726 2727 采药
1.链接地址:
http://bailian.openjudge.cn/practice/2773/
http://bailian.openjudge.cn/practice/2726/
http://bailian.openjudge.cn/practice/2727/
2.题目:
- 总Time Limit:
- 1000ms
- Memory Limit:
- 65536kB
- Description
- 辰辰是个很有潜能、天资聪颖的孩子,他的梦想是称为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出 了一个难题。医师把他带到个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给 你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”
如果你是辰辰,你能完成这个任务吗?
- Input
- 输入的第一行有两个整数T(1 <= T <= 1000)和M(1 <= M <=
100),T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的的整数,分别表示采
摘某株草药的时间和这株草药的价值。- Output
- 输出只包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。
- Sample Input
70 3
71 100
69 1
1 2- Sample Output
3- Source
- NOIP 2005
3.思路:
背包问题,dp模板题
由于规模小,直接使用未优化的背包问题解法即可
4.题目:
提供两个版本的答案
(1)未优化数组的,比较容易看懂
#include <iostream>
#include <cstdio> using namespace std; int main()
{
//freopen("C://input.txt","r",stdin); int i,j; int t,m;
cin >> t >> m; int *arr_time = new int[m];
int *arr_value = new int[m]; for(i = ;i < m; ++i) cin >> arr_time[i] >> arr_value[i]; int **dp = new int*[m];
for(i = ;i < m; ++i) dp[i] = new int[t + ]; for(i = ; i < arr_time[m - ] && i <= t; ++i) dp[m - ][i] = ;
for(i = arr_time[m - ]; i <= t; ++i) dp[m - ][i] = arr_value[m - ]; for(i = m - - ; i >= ; --i)
{
for(j = ; j < arr_time[i] && j <= t; ++j) dp[i][j] = dp[i + ][j];
for(j = arr_time[i]; j <= t; ++j) dp[i][j] = dp[i + ][j] > (dp[i + ][j - arr_time[i]] + arr_value[i]) ? dp[i + ][j] : (dp[i + ][j - arr_time[i]] + arr_value[i]);
} int max = ;
for(j = ; j <= t; ++j) if(max < dp[][j]) max = dp[][j]; cout << max << endl; for(i = ; i < m; ++i) delete [] dp[i];
delete [] dp; delete [] arr_time;
delete [] arr_value; return ;
}
(2)优化数组的
#include <iostream>
#include <cstdio>
#include <cstring> using namespace std; int main()
{
//freopen("C://input.txt","r",stdin); int i,j; int t,m;
cin >> t >> m; int *arr_time = new int[m];
int *arr_value = new int[m]; for(i = ;i < m; ++i) cin >> arr_time[i] >> arr_value[i]; int *dp = new int[t + ];
memset(dp,,sizeof(int) * (t + )); for(i = m - ; i >= ; --i)
{
for(j = t; j >= arr_time[i]; --j) dp[j] = dp[j] > (dp[j - arr_time[i]] + arr_value[i]) ? dp[j] : (dp[j - arr_time[i]] + arr_value[i]);
} int max = ;
for(j = ; j <= t; ++j) if(max < dp[j]) max = dp[j]; cout << max << endl; delete [] dp; delete [] arr_time;
delete [] arr_value; return ;
}
OpenJudge 2773 2726 2727 采药的更多相关文章
- Bzoj索引
1001 : http://ideone.com/4omPYJ1002 : http://ideone.com/BZr9KF1003 : http://ideone.com/48NJNh1004 : ...
- Hsql中In没有1000的限制
SELECT * FROM user , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ...
- jqu
1 /*2 * 说明:3 * 本源代码的中文注释乃Auscarlin呕心沥血所作.旨在促进jQuery的传播以及向广大jQuery爱好者提供一个进阶4 *的途径,以让各位更加深入地了解jQuery,学 ...
- JS逆向-抠代码的第二天【手把手学会抠代码】
今天的学习项目:沃支付:https://epay.10010.com/auth/login 清空浏览器缓存后,打开网页,输入手机号,密码222222,按照网站要求填入验证码(sorry,我没有账号密码 ...
- elf.h
1 /* This file defines standard ELF types, structures, and macros. 2 Copyright (C) 1995-2019 Free So ...
- [OpenJudge] 2727 仙岛寻药
2727:仙岛求药 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进 ...
- OpenJudge 2727 仙岛求药
总时间限制: 1000ms 内存限制: 65536kB 描述 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发 ...
- 【noip 2005】 采药
题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:" ...
- 【OpenJudge 8463】Stupid cat & Doge
http://noi.openjudge.cn/ch0204/8463/ 挺恶心的一道简单分治. 一开始准备非递归. 大if判断,后来发现代码量过长,决定大打表判断后继情况,后来发现序号不对称. 最后 ...
随机推荐
- Java基础学习中一些词语和语句的使用
在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...
- OC/Swift第三方添加出错解决方法
(未经同意,不得转载!) ------------------------华丽分割线-----------------------
- Tomcat无法部署项目
设置项目的Jdk,compire version 增加java EE 如果有必要,现在项目根目录下放置.mymetadata文件 <?xml version="1.0" en ...
- 怎样通过iPhone Safari 来安装测试版ipa
http://www.cocoachina.com/bbs/read.php?tid=94101# <?xml version="1.0" encoding="UT ...
- OpenCV Mat 类型定义和赋值
1.一般的Mat定义方法:cv::Mat M(height,width,<Type>),例: cv::Mat M(480,640,CV_8UC3); 表示定义了一个480行640列的矩阵, ...
- 应用:ValueStack
理解ValueStack的基本机制!对各种现象作出解释. ValueStack实际上就是对OGNL的封装,OGNL主要的功能就是赋值与取值,Struts2正是通过ValueStack来进行赋值与取值的 ...
- 假设有两个包含整数的vector对象,编写一段程序,检验其中一个vector对象是否是另一个的前缀。
#include<iostream> #include<string> #include<vector> using namespace std; int main ...
- 详解C中volatile关键字
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据.如果没有volatile关键字,则编译器可能优化读取和存储 ...
- vim纯文本处理插件txtbrowser
纯文本处理插件:txtBrowser 插件作者:http://guoyoooping.blog.163.com/ Github地址:https://github.com/vim-scripts/Txt ...
- Controller和RequestMapping
一.Controller返回值,String或者ModelAndView 首先看一下spring的配置文件,如下: 第一种,返回类型为String,Controller中的方法如下: 根据 ...