P1616 疯狂的采药 (完全背包优化)
(点击此处查看原题)
题意
简单来说,就是一个完全背包,不过这里卡住了常规的完全背包写法,时间复杂度为O( V*∑( V/c[i] ))如下所示:
for(int i = ;i <= n ;i ++)
{
scanf("%d%d",cost+i,val+i);
for(int j = t; j >= cost[i] ; j --)
{
for(int k = ; k * cost[i] <= j ;k ++)
{
dp[j] = max(dp[j],dp[j-k*cost[i]] + k * val[i]);
}
}
}
解题思路
既然普通的写法无法解决,那就采用如下的优化即可,时间复杂度为O(NV),题目满足N*T <= 1e7,因此可以跑过去:
for(int i = ;i <= n ;i ++)
{
scanf("%d%d",cost+i,val+i);
for(int j = cost[i]; j <= t; j ++)
{
dp[j] = max(dp[j],dp[j-cost[i]] + val[i]);
}
}
代码区
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<string>
#include<fstream>
#include<vector>
#include<stack>
#include <map>
#include <iomanip> #define bug cout << "**********" << endl
#define show(x, y) cout<<"["<<x<<","<<y<<"] "
#define LOCAL = 1;
using namespace std;
typedef long long ll;
const int inf = 1e9 + ;
const ll mod = 1e9 + ;
const int Max = 1e5 + ; int t, n;
int cost[Max],val[Max];
int dp[Max]; //记录价格为i的时候的最大价值 int main()
{
#ifdef LOCAL
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif
scanf("%d%d",&t,&n);
memset(dp,,sizeof(dp));
for(int i = ;i <= n ;i ++)
{
scanf("%d%d",cost+i,val+i);
for(int j = cost[i]; j <= t; j ++)
{
dp[j] = max(dp[j],dp[j-cost[i]] + val[i]);
}
}
printf("%d\n",dp[t]);
return ;
}
P1616 疯狂的采药 (完全背包优化)的更多相关文章
- P1616疯狂的采药 完全背包
题目背景 此题为纪念 LiYuxiang 而生. 题目描述 LiYuxiang 是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了 ...
- P1616 疯狂的采药(洛谷,动态规划递推,完全背包)
先上题目链接:P1616 疯狂的采药 然后放AC代码: #include<bits/stdc++.h> #define ll long long using namespace std; ...
- P1616 疯狂的采药
P1616 疯狂的采药 题目背景 此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为 ...
- 动态规划 洛谷P1616 疯狂的采药
动态规划 洛谷P1616 疯狂的采药 同样也是洛谷的动态规划一个普及-的题目,接下来分享一下我做题代码 看到题目,没很认真的看数据大小,我就提交了我的代码: 1 //动态规划 洛谷P1616 疯狂的采 ...
- 洛谷P1616疯狂的采药(完全背包)
题目背景 此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的 ...
- 洛谷 P1616 疯狂的采药【裸完全背包】
题目背景 此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的 ...
- 洛谷P1616 疯狂的采药【完全背包】
题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说 ...
- P1616 疯狂的采药【模板】
此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师. ...
- P1616 疯狂的采药 洛谷
题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说 ...
随机推荐
- Selenium定位class包含空格的元素-复合class节点
在HTML中, 节点有三种常见属性, 分别是id, name和class, 其中class是一个特殊的属性, 支持多个类名, 以空格隔开, 如下图所示: 你是否注意到, 为什么selenium中的fi ...
- Java中基本数据类型
在数据类型中,最常用也是最基础的数据类型,被称作基本数据类型.可以使用这些类型的值来代表一些简单的状态. Java 语言的基本数据类型总共有以下8 种,下面是按照用途划分出的4 个类别: 定点类型: ...
- .net 数据导出
安装npoi,下面是具体的C#代码: public static XSSFWorkbook BuildWorkbook(DataTable dt) { var book = new XSSFWorkb ...
- centos7下面ruby的升级
背景 在做redis集群时,所需要的使用ruby工具进行操作,发现在线安装的Ruby版本过低,redis支持的版本最少为2.2.2. 在线安装ruby 使用yum在线安装ruby,安装的版本为2.0. ...
- AB窗体互传参数本质
一.找了好几个,都不靠谱,不是说不靠谱,自己感觉太繁琐,根本就是本窗体的属性(对象)的传递,1实例化2把实例化后的窗体属性=本窗体的对象 二.传递的的时候都是在互相引用的时候传递,推荐的个人认为最简单 ...
- Android RecyclerView实现加载多种条目类型
今天咱们是用RecyclerView来实现这个多种Item的加载. 其实最关键的是要复写RecyclerView的Adapter中的getItemViewType()方法 这个方法就根据条件返回条目的 ...
- LC 975. Odd Even Jump
You are given an integer array A. From some starting index, you can make a series of jumps. The (1 ...
- python之crawlspider初探
注意点: """ 1.用命令创建一个crawlspider的模板:scrapy genspider -t crawl <爬虫名> <all_domain ...
- [spring boot]idea中实现热部署的方法
发生了任何修改之后,必须关闭后再启动Application类才能够生效,显得略微麻烦. Springboot提供了热部署的方式,当发现任何类发生了改变,马上通过JVM类加载的方式,加载最新的类到虚拟机 ...
- 原生vue实现表格的编辑,包括单元格合并,拆分,删除行/列, 添加行/列
先看效果图如下: 代码看这里: https://github.com/YalongYan/vue-table-edit