Piggy-Bank HDU - 1114
阿新 • • 發佈:2019-01-08
解法
完全裝滿揹包
求最小值那麼把所有的dp設定成inf(要完全裝滿),且轉移方程寫min,原點設定為0,然後套完全揹包就可以了
能不能完全裝滿的檢測就是看dp[m]有沒有更新,更新了那麼就是能完全裝滿否則完全裝不滿
程式碼
#include <bits/stdc++.h> using namespace std; int dp[1000005],v[1000],w[1000]; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cin>>t; while(t--) { int m1,m2; cin>>m1>>m2; int m=m2-m1; int n; cin>>n; for(int i=0;i<n;i++) cin>>w[i]>>v[i]; fill(dp,dp+1000005,999999999); dp[0]=0; for(int i=0;i<n;i++) for(int j=v[i];j<=m;j++) dp[j]=min(dp[j],dp[j-v[i]]+w[i]); if(dp[m]==999999999) cout<<"This is impossible.\n"; else cout<<"The minimum amount of money in the piggy-bank is "<<dp[m]<<".\n"; } }