M - 基础DP
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Description
The bone collector had a big bag with a volume of V ,and along his trip of collecting there are a lot of bones , obviously , different bone has different value and different volume, now given the each bone’s value along his trip , can you calculate out the maximum of the total value the bone collector can get ?
Input
Followed by T cases , each case three lines , the first line contain two integer N , V, (N <= 1000 , V <= 1000 )representing the number of bones and the volume of his bag. And the second line contain N integers representing the value of each bone. The third line contain N integers representing the volume of each bone.
Output
Sample Input
1
5 10
1 2 3 4 5
5 4 3 2 1
Sample Output
14 //第一行代表有T个测试案例
第二行 n,m 代表有 n 个物品,背包容量为 m 。接下来两行分别是 n 个物品的价值,体积 //动态规划入门,看了很久才懂。
我先用的递归做的 5696kb 452ms
#include <stdio.h>
#include <string.h> #define MAX 1005 int v[MAX];
int w[MAX];
int f[MAX][MAX]; int max(int a,int b)
{
return a>b?a:b;
} int dp(int n,int m)
{
if (f[n][m]>=) return f[n][m]; if (n==) return ; if (m<v[n])//fang bu liao
{
return dp(n-,m);
}
else
{
f[n][m]=f[n-][m];
f[n][m]=max(dp(n-,m),dp(n-,m-v[n])+w[n]);
}
return f[n][m];
} int main()
{
int i,t,n,m;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
for (i=;i<=n;i++)
scanf("%d",&w[i]);
for (i=;i<=n;i++)
scanf("%d",&v[i]); memset(f,-,sizeof(f)); printf("%d\n",dp(n,m));
}
return ;
}
递推 5592kb 78ms
#include <stdio.h> #define MAX 1005 int v[MAX];
int w[MAX];
int f[MAX][MAX]; int max(int a,int b)
{
return a>b?a:b;
} int main()
{
int i,j,t,n,m;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
for (i=;i<=n;i++)
scanf("%d",&w[i]);
for (i=;i<=n;i++)
scanf("%d",&v[i]); for (j=;j<=m;j++) f[][j]=; for (i=;i<=n;i++)
for (j=;j<=m;j++)
{
f[i][j]=f[i-][j];
if (j>=v[i])
f[i][j]=max(f[i-][j],f[i-][j-v[i]]+w[i]);
}
printf("%d\n",f[n][m]);
}
return ;
}
一维数组 1784kb 15ms
#include <stdio.h>
#include <string.h> #define MAX 1005 int v[MAX];
int w[MAX];
int f[MAX]; int max(int a,int b)
{
return a>b?a:b;
} int main()
{
int i,j,t,n,m;
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
for (i=;i<=n;i++)
scanf("%d",&w[i]);
for (i=;i<=n;i++)
scanf("%d",&v[i]); memset(f,,sizeof(f));
for (i=;i<=n;i++)
for (j=m;j>=;j--)
{
if (j>=v[i])
f[j]=max(f[j],f[j-v[i]]+w[i]);
}
printf("%d\n",f[m]);
}
return ;
}
M - 基础DP的更多相关文章
- 基础dp
队友的建议,让我去学一学kuangbin的基础dp,在这里小小的整理总结一下吧. 首先我感觉自己还远远不够称为一个dp选手,一是这些题目还远不够,二是定义状态的经验不足.不过这些题目让我在一定程度上加 ...
- 基础DP(初级版)
本文主要内容为基础DP,内容来源为<算法导论>,总结不易,转载请注明出处. 后续会更新出kuanbin关于基础DP的题目...... 动态规划: 动态规划用于子问题重叠的情况,即不同的子问 ...
- hdu 5586 Sum 基础dp
Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Desc ...
- hdu 4055 Number String (基础dp)
Number String Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 训练指南 UVA - 10917(最短路Dijkstra + 基础DP)
layout: post title: 训练指南 UVA - 10917(最短路Dijkstra + 基础DP) author: "luowentaoaa" catalog: tr ...
- 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP)
layout: post title: 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP) author: "luowentaoaa" catalog: true ...
- 「kuangbin带你飞」专题十二 基础DP
layout: post title: 「kuangbin带你飞」专题十二 基础DP author: "luowentaoaa" catalog: true tags: mathj ...
- lightoj1004【基础DP】
从低端到顶端求个最大值: 思路: 基础DP,递推 #include<cstdio> #include<queue> #include<map> #include&l ...
- hdu 4489 The King’s Ups and Downs(基础dp)
The King’s Ups and Downs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
随机推荐
- Spark-Join优化之Broadcast
适用场景 进行join中至少有一个RDD的数据量比较少(比如几百M,或者1-2G) 因为,每个Executor的内存中,都会驻留一份广播变量的全量数据 Broadcast与map进行join代码示例 ...
- asp.net原理笔记----页面控件类型,页面状况和asp.net编译过程
通过查看asp.net的整个生命周期之后 了解到在aspx的页面生命周期中 调用了BuildControlTree()方法生成页面控件树 之后再调用Rend()方法根据控件树生成html返回 aspx ...
- 【共享单车】—— React后台管理系统开发手记:项目工程化开发
前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...
- Directional Light,Ambient,Specular,光照感性认识...
- PLSQL Developer设置及快捷键设置
1.登录后默认自动选中My Objects 默认情况下,PLSQL Developer登录后,Brower里会选择All objects,如果你登录的用户是dba,要展开tables目录,正常情况都需 ...
- BAT都来参加的 DevOps Master 培训
原文:http://www.sohu.com/a/128425731_262549 自高效运维社区开设 DevOps Master 认证培训以来,已经总共有120多人拿到证书,其中在今年春节后,有68 ...
- Mysql查询结果只有一条的情况下把值赋值给变量,再用if else 流程判断
BEGIN set @n=(SELECT count(day) from log where day=CURDATE()); THEN call m_LogInsert(); ELSE call m_ ...
- C#中String.Empty、NULL与""三者的区别
String.Empty和""是一样的,都是空,习惯用string.empty. Null和他们就有区别了,就是没有值,也没分配地址,此处可以理解成什么都没有.
- nightwatch API
API Nightwatch的API分为四个部分 1.Expect 在browser实例上以.expect.element开头的BDD(行为驱动测试)风格的接口,0.7及以上版本nightwatch可 ...
- Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向
很多android应用的下拉刷新都是使用的pulltorefresh这个开源项目,但是它的扩展性在下拉刷新同时又上拉加载更多时会有一定的局限性.查了很多地方,发现这个开源项目并不能很好的同时支持下拉刷 ...