DHU 1114 Piggy-Bank (完全背包,變式)

來源:互聯網
上載者:User
連結:http://acm.hdu.edu.cn/showproblem.php?pid=1114  ================================== 題目大意,給你空小豬儲錢罐的重量和裝滿小豬儲錢罐的重量還有給你硬幣的價值和重量,讓你估計儲錢罐裡最少會有多少價值的錢這道題因為硬幣個數不為1,所謂我們考慮使用完全背包 這時候我們就要分析動態方程,要求的最小的價值,那麼很好理解,使用min函數,使dp儲存的是價值最小值。此時我們需要將dp數組初始化為 最大值,並且 dp[0]=0,表示什麼都不能放進去。然後我們考慮如何更新dp數組。dp保留的是最小值,那麼數組下標則要表示的是重量問題。所以可以這樣列動態方程:dp[i]=min(dp[i],dp[i-weight]+value); 接下來就很簡單了: AC代碼如下:
 
#include<iostream>#include<stdio.h>using namespace std;#define INF 100000000int dp[50010];int value[50010],weight[50010];int V,num;int E,F;int min(int a,int b){if(a>b)return b;elsereturn a;}void CompletePack(int value,int weight){int i;for(i=weight;i<=V;i++)dp[i]=min(dp[i],dp[i-weight]+value);}int main(){int Case;scanf("%d",&Case);while(Case--){int i;scanf("%d %d",&E,&F);scanf("%d",&num);V=F-E;for(i=1;i<=num;i++)scanf("%d %d",&value[i],&weight[i]);for(i=1;i<=V;i++)dp[i]=INF;dp[0]=0;for(i=1;i<=num;i++)CompletePack(value[i],weight[i]);if(dp[V]>=INF)printf("This is impossible.\n");elseprintf("The minimum amount of money in the piggy-bank is %d.\n",dp[V]);}return 0;}

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.