zoukankan      html  css  js  c++  java
  • POJ1384完全背包问题

    题目大意:给你一个储蓄罐空的,和满的重量,然后给出各种硬币的价值和对应的重量,
    要你估计出储蓄罐里面硬币价值和最小为多少,注意要保证重量和恰好为给出满的重量
    解题思路:完全背包问题,只是求最小值,注意初始化的处理就可以。
    已知储蓄罐满时的质量f以及空时质量e,有n种硬币,每种硬币的价值为p,质量为w,求该储蓄罐中的最少有多少钱?
    这道题还要用到动态规划

     1 #include<stdio.h>
     2 #define inf 10000000
     3 #include<iostream>
     4 using namespace std;
     5 int main(){
     6     int n;
     7     scanf("%d",&n);
     8     while(n--){
     9         int i,empty,full,m;
    10         int p[600],w[600],dp[10050];//p是价值,w是重量;
    11         scanf("%d%d",&empty,&full);
    12         full-=empty;
    13         scanf("%d",&m);
    14         for(i=0;i<m;i++)
    15             scanf("%d%d",&p[i],&w[i]);
    16         for(i=0;i<=full;i++)//将dp数组中的值全部变成inf;
    17             dp[i]=inf;
    18         dp[0]=0;
    19         for(int k=0;k<m;k++)
    20             for(i=0;i<=full;i++)
    21                 if(i>=w[k])
    22                     dp[i]=min(dp[i],dp[i-w[k]]+p[k]);//动态规划递推关系式,更新dp数组;dp[k-w[k]]表示的是增加k-w[k]重量的得到价值;
    23         if(dp[full]==inf)
    24             printf("This is impossible.
    ");
    25         else
    26             printf("The minimum amount of money in the piggy-bank is %d.
    ",dp[full]);
    27     }
    28     return 0;
    29 }
  • 相关阅读:
    [模板] 多项式全家桶
    [模板] 最大流和费用流分别的两种做法
    [模板] Miller_Rabin和Pollard_Rho
    [模板] 半平面交
    hdu4624 Endless Spin (min-max容斥+dp)
    luogu5193 炸弹 (扫描线)
    luogu4055 游戏 (二分图博弈)
    [模板]后缀自动机
    [模板]fhqTreap
    loj2977 巧克力 (斯坦纳树+随机化)
  • 原文地址:https://www.cnblogs.com/OMG-By/p/5289215.html
Copyright © 2011-2022 走看看