题目:http://poj.org/problem?id=1742

可以正常地多重背包。但是看了《算法竞赛入门经典》,收获了贪心的好方法。

因为这里只需知道是否可行,不需更新出最优值之类的,所以:

新出来一个可行的必然是只有用了当前面值才可行的,就记录下使它可行最少用多少个当前面值,以资后续限制在 c [ i ] 个以内。

  use 数组每次清零,只记当前面值用了几个就行。

之所以正常多重背包不能这样,是因为当前体积要不要通过若干个当前物品来更新与体积为 j - a [ i ] 时 有无用/用了几个 当前物品没有必然联系;

  这里之所以有联系,是因为当前体积若想“可行”,必须通过“使用当前面积”。这个“必须”提供了贪心优化的空间。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,a[],c[],use[],ans;
bool b[];
int main()
{
while()
{
scanf("%d%d",&n,&m);
if(!n&&!m)return ;
memset(b,,sizeof b);
ans=;b[]=; /////b[0]=1
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
for(int i=;i<=n;i++)
scanf("%d",&c[i]);
for(int i=;i<=n;i++)
{
memset(use,,sizeof use);
for(int j=a[i];j<=m;j++)
if(!b[j]&&b[j-a[i]]&&use[j-a[i]]<c[i])
{
b[j]=;use[j]=use[j-a[i]]+;ans++;
}
}
printf("%d\n",ans);
}
}

POJ1742Coins的更多相关文章

  1. POJ1742Coins(并不理解是什么意思)

    Coins Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 32309   Accepted: 10986 Descripti ...

  2. POJ1742----Coins

    背包专题:http://www.cnblogs.com/qq188380780/p/6409474.html //多重背包 #include<cstdio> ],a[][]; int Ro ...

  3. POJ1742Coins(多重背包)

    Coins Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 32309   Accepted: 10986 Descripti ...

  4. POJ1742--Coins(动态规划)

    People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar.One day Tony ...

  5. poj1742Coins(多重背包)

    People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar.One day Tony ...

  6. POJ_1742_Coins_(动态规划,多重部分和)

    描述 http://poj.org/problem?id=1742 n种不同面额的硬币 ai ,每种各 mi 个,判断可以从这些数字值中选出若干使它们组成的面额恰好为 k 的 k 的个数. 原型: n ...

  7. POJ 1742 Coins(多重背包) DP

    参考:http://www.hankcs.com/program/cpp/poj-1742-coins.html 题意:给你n种面值的硬币,面值为a1...an,数量分别为c1...cn,求问,在这些 ...

  8. dp入门 专题记录 2017-7-26

    POJ3176-Cow Bowling 题目大意:现有n行数,以金字塔的形式排列,即第一行一个数字,第二行2个数字,依次类推,现在需要找一条从第一层到第n层的路线,使得该路线上的所有点的权值和最大 思 ...

  9. dp问题 -挑战例题 2017-7-24

    01 背包 题意: 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数).求背包能够容纳的最大价值. f[i] ...

随机推荐

  1. 87. Scramble String *HARD* 动态规划

    Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...

  2. DB2开发系列之二——SQL过程

    1.SQL 过程的结构 1)SQL过程的结构 CREATE PROCEDURE proc_name   IN, OUT, INOUT parameters   optional clauses   S ...

  3. 流媒体传输协议详解之---RTSP认证

    from:http://blog.csdn.net/machh/article/details/52121648 Rtsp认证主要分为两种:   基本认证(basic authentication)和 ...

  4. CentOS下tar解压 gz解压 bz2等各种解压文件使用方法

    .tar  解包:tar xvf FileName.tar  打包:tar cvf FileName.tar DirName  (注:tar是打包,不是压缩!)  ———————————————  . ...

  5. apscheduler -定时任务

    https://apscheduler.readthedocs.io/en/latest/userguide.html 简单的使用方式为: from apscheduler.schedulers.bl ...

  6. ExceptionHandler 异常公共处理

    异常的公共处理很多种,采用注解的方式,拦截器的方式等都可以,我采用的是继承 AbstractHandlerExceptionResolver 来实现, 上代码 package com.yun.util ...

  7. 强大的安卓手机远程管理工具 – Droidjack

    免责声明:本站提供安全工具.程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! Droidjack是一款针对安卓手机远程管理工具,你可以利用它在PC上对手机进行远程操控,不仅功能强大,使用 ...

  8. Nexus设备渗透测试平台 – Kali Linux NetHunter

    NetHunter是一个基于Kali Linux为Nexus设备构建的Android渗透测试平台,其中包括一些特殊和独特的功能.NetHunter支持无线802.11注入,一键MANA AP搭建,HI ...

  9. 接下来将介绍C#如何设置子窗体在主窗体中居中显示,本文提供详细的操作步骤,需要的朋友可以参考下

    接下来将介绍C#如何设置子窗体在主窗体中居中显示,本文提供详细的操作步骤,需要的朋友可以参考下 其实表面上看是很简单的 开始吧,现在有两个窗体Form1主窗体,Form2子窗体 而且我相信大部分人都会 ...

  10. opencv-python教程学习系列10-颜色空间转换

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍颜色空间转换,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 系 ...