题目大意:有n件物品,每件物品均有各自的价值和体积,给你一个容量为 V 的背包,问这个背包最多能装的物品的价值是多少?
       解题思路:这是一道0 - 1 背包的简单模板题,也是基础的DP问题,状态转移方程 
                     f[i][j] = max{ f[ i - 1 ][j] , f[ i - 1 ][ j - v[i] ] + w[i]  }
        边界条件:f[0][0] = f[0][1] = ……  = f[0][ V ] = 0 ;   
这是我的第一道DP,为了纪念一下,我练习了三种解法,如有错误,敬请读者指出。
#include <iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<cmath>
#include<cstdio>
using namespace std;
const int MAXN = 1111 ;
int n , V ;
int w[MAXN] ; // 物品的价值
int v[MAXN] ; // 物品自身的体积
int f[MAXN][MAXN] ;
bool vis[MAXN][MAXN] ;
int f2[MAXN] ;
void init()
{
scanf("%d%d" , &n , &V) ;
int i ;
for(i = 1 ; i <= n ; i ++)
{
scanf("%d" , &w[i]) ;
}
for(i = 1 ; i <= n ; i ++)
{
scanf("%d" , &v[i]) ;
}
}
void solve1() // 普通解法
{
int i , j ;
for(j = 0 ; j <= V ; j ++)
{
f[0][j] = 0 ;
}
for(i = 1 ; i <= n ; i ++)
{
for(j = 0 ; j <= V ; j ++)
{
f[i][j] = f[i - 1][j] ;
if(j >= v[i])
f[i][j] = max(f[i - 1][j] , f[i - 1][j - v[i]] + w[i]) ;
}
}
printf("%d\n" , f[n][V]) ;
}
void solve2() // 滚动数组解法
{
memset(f2 , 0 , sizeof(f2)) ;
int i , j ;
for(i = 1 ; i <= n ; i ++)
{
for(j = V ; j >= 0 ; j --)
{
if(j >= v[i])
f2[j] = max(f2[j] , f2[ j - v[i] ] + w[i]) ;
}
}
printf("%d\n" , f2[V]) ;
}
int dp(int i , int j)
{
int& ans = f[i][j] ;
if(vis[i][j])
return f[i][j] ;
if(i == 0)
ans == 0 ;
else
{
ans = dp(i - 1 , j) ;
if(j >= v[i])
ans = max(dp(i - 1 , j) , dp(i - 1 , j - v[i]) + w[i] ) ;
}
vis[i][j] = true ;
return ans ;
}
void solve3() // 用记忆化搜索(memoization)求解,完全按照状态转移方程来写,较易理解。
{
memset(vis , 0 , sizeof(vis)) ; // 初始化标记数组
printf("%d\n" , dp(n , V)) ; }
int main()
{
int T ;
scanf("%d" , &T) ;
while (T --)
{
init() ;
solve1() ;
solve2() ;
//solve3() ;
}
return 0 ;
}


HDU 2602 Bone Collector - from lanshui_Yang的更多相关文章

  1. HDU 2602 Bone Collector 0/1背包

    题目链接:pid=2602">HDU 2602 Bone Collector Bone Collector Time Limit: 2000/1000 MS (Java/Others) ...

  2. HDOJ(HDU).2602 Bone Collector (DP 01背包)

    HDOJ(HDU).2602 Bone Collector (DP 01背包) 题意分析 01背包的裸题 #include <iostream> #include <cstdio&g ...

  3. hdu 2602 Bone Collector(01背包)模板

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 Bone Collector Time Limit: 2000/1000 MS (Java/Ot ...

  4. HDU 2602 Bone Collector

    http://acm.hdu.edu.cn/showproblem.php?pid=2602 Bone Collector Time Limit: 2000/1000 MS (Java/Others) ...

  5. HDU 2602 Bone Collector(经典01背包问题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2602 Bone Collector Time Limit: 2000/1000 MS (Java/O ...

  6. HDU 2602 Bone Collector (简单01背包)

    Bone Collector http://acm.hdu.edu.cn/showproblem.php?pid=2602 Problem Description Many years ago , i ...

  7. hdu 2602 Bone Collector 背包入门题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 题目分析:0-1背包  注意dp数组的清空, 二维转化为一维后的公式变化 /*Bone Coll ...

  8. HDU 2602 Bone Collector(01背包裸题)

    Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  9. HDU 2602 - Bone Collector - [01背包模板题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 Many years ago , in Teddy’s hometown there was a ...

随机推荐

  1. QT VS配置UNICODE问题

    默认情况下,使用VSQT插件 导入.pro后,会自动在项目文件里面预定义好宏UNICODE,可以把该宏去掉,以免造成其他程序,使用多字节的代码出错 去除的两个方法 1.打开Propject->P ...

  2. git 拉取远程分之到本地

    git checkout -b newbranch_name --track origin/feature/newbranch_name 如果遇到类似: fatal: git checkout: up ...

  3. mysqlbinlog 读取多个文件

    [root@zjzc01 binlog]# mysqlbinlog --start-datetime='2016-02-25 00:00:00' --stop-datetime='2016-03-15 ...

  4. thinkPHP模板引擎案例

    1.if <if condition="$vo.business eq LS"> 零售 <elseif condition="$vo.business ...

  5. TCP的那些事(转载)

    (转载本站文章请注明作者和出处 酷 壳 – CoolShell.cn ,请勿用于任何商业用途) TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面.所以学习TCP本身 ...

  6. VC++6.0下通过opencv读入图像并反色

    第一个opencv测试程序: 不多说,直接上代码,代码注释很详尽: ////////////////////////////////////////////////////////////////// ...

  7. 关系型数据库事务处理ACID

    ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性 (Isolation).持久性(Durability).一个支持事务( ...

  8. OC基础14:使用文件

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.对于NSFileManager类,文件 ...

  9. C++暂时对象

    C++真正所谓的暂时对象是不可见的--不会在你的源码中出现.仅仅要你产生一个non-heap object而没有为它命名,便诞生了一个暂时对象.此等匿名对象通常发生于两种情况: 一是当隐式类型转换(i ...

  10. 新闻公布系统 (Asp.net 三层架构 )

    2012年度课程设计---新闻公布系统(小结)                                                                             ...