DP之背包问题详解及案例

0-1背包

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602

#include <stdio.h>
#include <string.h>
#include <algorithm>
#define MAX 10000

using namespace std;

int val[MAX];
int w[MAX];
int dp[MAX];

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        memset(dp,0,sizeof(dp));
        int n,W;
        scanf("%d%d",&n,&W);

        for(int i=0;i<n;i++)
            scanf("%d",&val[i]);

        for(int i=0;i<n;i++)
            scanf("%d",&w[i]);

        for(int i=0;i<n;i++)
        {
            for(int j=W;j>=w[i];j--)
                if(dp[j-w[i]]+val[i]>dp[j])
                    dp[j]=dp[j-w[i]]+val[i];
        }

        printf("%d\n",dp[W]);
    }
    return 0;
}

完全背包:

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114

#include <stdio.h>
#include <string.h>
#include <algorithm>
#define MAX 10000
#define INF 0x3f3f3f3f

using namespace std;

int dp[MAX];
int val[MAX];
int w[MAX];

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        memset(dp,INF,sizeof(dp));
        int W,m,k;
        scanf("%d%d",&m,&k);
        W=k-m;

        int n;
        scanf("%d",&n);

        for(int i=0;i<n;i++)
            scanf("%d%d",&val[i],&w[i]);

        dp[0]=0;
        for(int i=0;i<n;i++)
        {
            for(int j=w[i];j<=W;j++)
            {
                dp[j]=min(dp[j],dp[j-w[i]]+val[i]);
            }
        }
        if(dp[W]==INF)
            printf("This is impossible.\n");
        else
            printf("The minimum amount of money in the piggy-bank is %d.\n",dp[W]);

    }
    return 0;
}
时间: 2024-11-05 13:37:32

DP之背包问题详解及案例的相关文章

(转)dp动态规划分类详解

dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强,主要考察思维能力.建模抽象能力.灵活度. ****************************************************************************************** 动态规划(英语:Dynamic programm

下载Zookeeper从入门到精通(开发详解,案例实战,Web界面监控)

ZooKeeper是Hadoop的开源子项目(Google Chubby的开源实现),它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.命名服务.分布式同步.组服务等. Zookeeper的Fast Fail 和 Leader选举特性大大增强了分布式集群的稳定和健壮性,并且解决了Master/Slave模式的单点故障重大隐患,这是越来越多的分布式产品如HBase.Storm(流计算).S4(流计算)等强依赖Zookeeper的原因. Zookeeper从入门到精通(开发详解,案

Java指针详解___案例解答

大家先看看下面的这个程序:--------->相信初级程序员就能看得懂 int k1=1; int k2=k1; k2+=8; System.out.println("k1:"+k1); 大声回答,k1等于几? 输出: k1:1 这是为什么呢?不是明明k2已经指向了k1,然后k2的值发生改变,k1就要发生改变吗? 刚开始:k1 ,k2指向同一个内存地址: 当发生语句:k2+=8的时候,我们这么看:k2=k2+8,第一步:k2+8,很简单啊,等于9呗,这时候,内存空间会自动分配一个

DBA_Oracle GoldenGate安装详解(案例)

http://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html Oracle GoldenGate软件基于数据库日志结构变化,通过解析源端在线日志或归档日志获得数据增量,再将这些变化应用到目标数据库,从而实现源库和目标库的 数据同步.下面通过一个简单的示例,详细介绍利用GoldenGate实现Oracle数据库之间的同步.基本架构如下图所示: 1. 安装 1.1 下载介质 GoldenGate的安装介质可以

OAF_OAF Debug And Log调试和记录工具的详解(案例)

2014-06-16 BaoXinjian 一.摘要 在需求后期,对实现该需求的代码进行调试时一个不可忽略的步骤,可以确保代码在上线后尽可能避免出现bug和异常 在OAF开发中一般相关的部分主要有 1. 使用OAF Bug工具调试代码 设定Breakpoint断电 查看Exception Stack Trace 设定Exception Breakpoint断点 进行Debug,查看Call Stack和Data在断点上 2. 使用OAF Diagnostic工具产生log 确认调试项目启动了Di

NFS服务器原理和安装配置详解附案例演练

NFS服务器原理和安装配置详解附案例演练 1.什么是NFS服务器 NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器.不同的操作系统可以共享彼此的文件. NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利: 2.NFS挂载原理 NFS服务器的挂载结构图: 如上图示: 当我们在NFS服务器设置好一个共享目录/home/public后

Unix Shell_Oracle EBS基于主机文件Host开发详解(案例)

2014-06-20 BaoXinjian 一.摘要 Oracle 并发程式中Host Type的可执行程式,它的作用是用于调用Unix Shell去执行某些需求 个人觉得Oracle EBS中引入Host去调用unix shell其弥补了很多PLSQL类型程式无法做的某些功能,以unix shell的语法结构直接对服务器进行操作 写host并发程式时,需要较强的Bash语法知识,个人不做DBA,只了解一部分,所以就不具体介绍了,只说明一下Oracle EBS开发Unix Shell时需要注意的

SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码)

SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码) 概述: 表由行和列组成,每个表都必须有个表名. SQL CREATE TABLE 语法 CREATE TABLE table_name ( column_name1 data_type(size), column_name2 data_type(size), column_name3 data_type(size), .... ); 1.查看表 exec sp_help table1; 2.创建表 create tab

背包问题详解

01背包 一个背包中容量为V,现在有N个物品,每个物品的第i个 物品体积为weight[i],价值为value[i],现在往背包里面装东西,怎么装能使背包的内物品价值最大?这是01背包的最基础最根本的问题.01代表的意思是该物品取或者不取.顺便提一下各种背包之间的区别,完全背包每种物品的数目是无限种,多重背包的每种物品数目是有限中. 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值.则其状态转移方程便是: f[i][v]=max{f[i-1][v],f[