动态规划—Problem R

原创 2016年05月30日 21:58:02

动态规划—Problem R
题意
题意:给出小猪钱罐的重量和装满钱后的重量,然后是几组数据,每组数据包括每种钱币的价值与重量。要求出重量最少能装满钱罐时的最大价值。
解题思路
完全背包问题。关于完全背包嘛,即在01背包的基础上,每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件、取1件、取2件……等很多种。如果仍然按照解01背包时的思路,令f[i][v]表示前i种物品恰放入一个容量为v的背包的最大权值。
状态转移方程为:
dp[j] = min(dp[j],dp[j-wei[i]]+val[i]).
最后,如果动规数组最后一格数据不等于初始值,即为答案。
感想
最近上课听的有些懵逼,呵呵,完全背包,还需再加深认识与理解。
AC代码

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

int dp[1000005];

int main()
{
    int t;
    int wa,wb,w;
    int n,val[505],wei[505],i,j;
    cin>>t;
    while(t--)
    {
        cin>>wa>>wb;
        w = wb-wa;//必须减去小猪本身重量
        cin>>n;
        for(i = 0;i<n;i++)
            cin>>val[i]>>wei[i];
        for(i = 0;i<=w;i++)
        {
            dp[i] = 10000000;//因为要求小的,所以dp数组必须存大数
        }
        dp[0] = 0;
        for(i = 0;i<n;i++)
        {
            for(j = wei[i];j<=w;j++)
            {
                dp[j] = min(dp[j],dp[j-wei[i]]+val[i]);
            }
        }
        if(dp[w] == 10000000)
            printf("This is impossible.\n");
        else
            printf("The minimum amount of money in the piggy-bank is %d.\n",dp[w]);
    }

    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

hdu 1722 Cake 数学yy

一次生日Party可能有p人或者q人参加,现准备有一个大蛋糕.问最少要将蛋糕切成多少块(每块大小不一定相等),才能使p人或者q人出席的任何一种情况,都能平均将蛋糕分食. 想一下,如果把蛋糕均分为n份...
  • u013532224
  • u013532224
  • 2015年07月08日 10:41
  • 547

动态规划问题(小思)

对于解可能是指数形式,并且可供选择的策略不是很多,每一个策略选择后都会产生一种状态转移,可采用dp来求解214. Shortest Palindrome72. Edit Distance要求:求两个字...
  • qq754438390
  • qq754438390
  • 2017年04月22日 08:50
  • 405

【动态规划法】解析经典算法题Two eggs problem及其延伸问题

【动态规划法】解析经典算法题Two eggs problem及其延伸问题Two eggs problem可以说是互联网面试中老生常谈的算法题了,经常可以在各大互联网公司的笔试真题中看到它的各类变种(腾...
  • u010582082
  • u010582082
  • 2017年03月28日 12:04
  • 592

POJ - 3265/USACO - Jan07 Gold Problem Solving 动态规划(DP) | 对USACO官方题解0ms程序的解释

【问题描述】 过去的日子里,农夫John的牛没有任何题目。可是现在他们有题目,有很多的题目。 精确地说,他们有 P 道题目要做。并且他们还离开了农场并且象普通人一样找到了工作,他们的月薪是M 元(上...
  • q1093383371
  • q1093383371
  • 2016年09月07日 19:27
  • 404

动态规划之重叠子问题属性(Overlapping Subproblems Property)

Dynamic Programming is an algorithmic paradigm that solves a given complex problem by breaking it in...
  • sinat_36246371
  • sinat_36246371
  • 2016年10月13日 09:25
  • 651

动态规划--背包问题

92. Backpack Given n items with size Ai, an integer m denotes the size of a backpack. How full y...
  • sinat_26230689
  • sinat_26230689
  • 2016年07月05日 22:13
  • 939

扔鸡蛋问题(Egg Dropping Puzzle)

文章转自:Acm之家 http://www.acmerblog.com/egg-dropping-puzzle-5591.html 据说这是一道google的面试题. 看似是一个智力题,实际是编...
  • u013457382
  • u013457382
  • 2015年10月11日 00:32
  • 991

uva 1380 - A Scheduling Problem 一个调度问题 好难的动态规划

想不出来啊!!!,紫书上写的很清楚。 1.利用题目给出的图论定理,先不考虑无向边,假如图中有向链的最大长度为K,那么答案为K+1或K+2(注意是K链的长度,答案是链包含点的个数)。 2.考虑答...
  • yskyskyer123
  • yskyskyer123
  • 2016年02月09日 22:07
  • 527

动态规划(Dynamic Programming)学习笔记记录

要了解DP,需要知道递归的知识和基本的暴力搜索。定义: 本质:递归 原问题(N)->子问题(N-1)->原问题(N) 最优子结构 子问题最优决策可导出原问题最优决策 无后效性 重叠子问题 去冗余 ...
  • dingchenxixi
  • dingchenxixi
  • 2016年09月14日 19:23
  • 520

动态规划之01背包问题(Knapsacks Problem)

背包问题 一、01背包问题
  • Netown_Ethereal
  • Netown_Ethereal
  • 2014年04月30日 18:09
  • 2034
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态规划—Problem R
举报原因:
原因补充:

(最多只允许输入30个字)