码迷,mamicode.com
首页 > 其他好文 > 详细

POJ1384完全背包问题

时间:2016-03-17 21:26:23      阅读:328      评论:0      收藏:0      [点我收藏+]

标签:

题目大意:给你一个储蓄罐空的,和满的重量,然后给出各种硬币的价值和对应的重量,
要你估计出储蓄罐里面硬币价值和最小为多少,注意要保证重量和恰好为给出满的重量
解题思路:完全背包问题,只是求最小值,注意初始化的处理就可以。
已知储蓄罐满时的质量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.\n");
25         else
26             printf("The minimum amount of money in the piggy-bank is %d.\n",dp[full]);
27     }
28     return 0;
29 }

 

POJ1384完全背包问题

标签:

原文地址:http://www.cnblogs.com/OMG-By/p/5289215.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!