传送门:http://poj.org/problem?id=3624

题目大意:XXX去珠宝店,她需要N件首饰,能带的首饰总重量不超过M,要求不超过M的情况下,使首饰的魔力值(D)最大。

0-1背包入门题。

可构建状态转移方程:

dp [ i ] [ v ]= max ( dp[ i-1 ] [ v ], dp[ i-1 ][ v- W[ i ] ]+d[ i ] ] )

但是这样空间太大,可以用滚动数组解决。

		for(int i=1;i<=N;i++)
{
for(int j=M;j>=w[i];j--)
{
f[j]=max ( f[j] , f[j-w[i]]+d[i]);
}
}

为什么这样做是正确的呢?f数组是从上到下,右到左计算的,计算f ( i, j)之前, f( j )保存的就是 f(i-1 ,j)的值,f ( j-w )就是 f(i-1 ,j-w)的值,所以f[j]=max ( f[j] , f[j-w[i]]+d[i]); 就把

f(i-1 ,j-w[i]) +d[i] 和 f(i-1 ,j)中大的保存起来。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=12880+10;
int f[MAXN],w[MAXN],d[MAXN];
int main()
{
int N,M;
while(~scanf("%d%d",&N,&M))
{
for(int i=1;i<=N;i++)
scanf("%d%d",&w[i],&d[i]); memset(f,0,sizeof(f)); for(int i=1;i<=N;i++)
{
for(int j=M;j>=w[i];j--)
{
f[j]=max ( f[j] , f[j-w[i]]+d[i]);
}
} printf("%d\n",f[M]);
}
}

当然也可以边输入边处理:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=12880+10;
int f[MAXN],w,d;
int main()
{
int N,M;
while(~scanf("%d%d",&N,&M))
{
memset(f,0,sizeof(f));
for(int i=1;i<=N;i++)
{
scanf("%d%d",&w,&d);
for(int j=M;j>=w;j--)
{
f[j]=max ( f[j] , f[j-w]+d );
}
}
printf("%d\n",f[M]);
}
}

POJ 3624 Charm Bracelet 0-1背包的更多相关文章

  1. POJ.3624 Charm Bracelet(DP 01背包)

    POJ.3624 Charm Bracelet(DP 01背包) 题意分析 裸01背包 代码总览 #include <iostream> #include <cstdio> # ...

  2. POJ 3624 Charm Bracelet (01背包)

    题目链接:http://poj.org/problem?id=3624 Bessie has gone to the mall's jewelry store and spies a charm br ...

  3. POJ 3624 Charm Bracelet(01背包模板)

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 45191   Accepted: 19318 ...

  4. poj 3624 Charm Bracelet(01背包)

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 29295   Accepted: 13143 ...

  5. POJ 3624 Charm Bracelet(0-1背包模板)

    http://poj.org/problem?id=3624 题意:给出物品的重量和价值,在重量一定的情况下价值尽可能的大. 思路:经典0-1背包.直接套用模板. #include<iostre ...

  6. POJ 3624 Charm Bracelet【01背包】

    解题思路:直接套公式就能做的01背包, for(i=1;i<=n;i++) { for(v=w[i];v<=m;v++) f[i,v]=max(f[i,v],f[i-1,v-w[i]]+d ...

  7. POJ 3624 Charm Bracelet 简单01背包

    题目大意:有n件珠宝,每个珠宝的魅力值为v,重量为w,求在重量不超过m的情况下能达到的最大魅力值. 题目思路:简单的01背包,由于二维数组会超内存所以应该压缩成一维数组. dp[i][j],表示选取i ...

  8. poj 3624 Charm Bracelet 背包DP

    Charm Bracelet Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=3624 Descripti ...

  9. POJ 3624 Charm Bracelet(01背包裸题)

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 38909   Accepted: 16862 ...

  10. POJ 3624 Charm Bracelet(01背包)

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 34532   Accepted: 15301 ...

随机推荐

  1. hdp spark beeline

    thriftserver端口号10016 hdp所用端口号由10000改为10016 !connect jdbc:hive2://localhost:10016

  2. 【Hello 2018 B】Christmas Spruce

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 写个dfs看看是不是每个节点都有3个叶子节点就可以了. [代码] #include <bits/stdc++.h> us ...

  3. android 弹幕评论效果

    纯粹依照自己的想法仿照b站的弹幕写的一个demo,不知道正确的姿势怎么样的. demo下载地址 首先.一条弹幕就是一个textview public abstract class Danmu exte ...

  4. 26.多线程join detach

    #include <iostream> #include <thread> #include <array> #include <Windows.h> ...

  5. Day2下午解题报告

    预计分数:100+100+30=230 实际分数:100+100+30=230人品爆发&&智商爆发&&手感爆发 T3数据好水,,要是把数组开大一点的话还能多得10分,, ...

  6. 解决eclipse端口被占用的问题

    问题如图所示,在eclipse中开启tomcat服务器时报错:端口已被占用. 这是因为在tomcat开启的状态下,eclipse异常关闭,导致tomcat一直占用端口. 解决办法如下: 1: 输入命令 ...

  7. 【SSH高速进阶】——struts2简单的实例

    近期刚刚入门struts2.这里做一个简单的struts2实例来跟大家一起学习一下. 本例实现最简单的登陆,仅包括两个页面:login.jsp 用来输入username与password:succes ...

  8. 想知道WiFi是什么样子的么?

    据英国<每日邮报>报道.英国纽卡斯尔大学博士生路易斯·赫南日前利用定制的仪器为WiFi信号拍照,绘制出一系列展现人类周围无形网络WiFi连接情况的图,这些盘旋环绕的明亮光束,宛如幽灵一般缠 ...

  9. 116.C语言异常抛错

    #include <stdlib.h> #include <stdio.h> #include <setjmp.h> //异常抛错检测 jmp_buf buf1; ...

  10. 前端面试题(计算机网络/http/https)

    (前端面试题大全,持续更新) 输入url的一系列过程 http缓存(缓存生效的情况),拓展下 get与post的异同,POST一般可以发送什么类型的文件 jsonp有什么不好的地方 http请求头(h ...