這個問題的原型就是完全揹包問題模型,所不同的是完全揹包問題要求的是最大價值,而這個是最小價值
完全揹包問題的模型**是
for (int i = 1; i <= n; ++ i)
for (int j = c[i]; j <= v; ++ j)
dp[j] = max(dp[j - c[i]] + w[i], dp[j]);
明確了這個模型是完全揹包問題,我們再來確定初始狀態,dp陣列的初始狀態,dp[0]應該是0,dp[1-m]都inf,原因是想用硬幣更新其值,不然就是乙個硬幣都沒有放入。(感覺模擬求乙個陣列的最小值比較好理解這裡的初始化inf的處理)
既然是求得最小價值,那麼狀態轉移方程應該是dp[j]=min(dp[j-c[i]+w[i],dp[j]);
#includeusing namespace std;
#define inf 1e9
const int n=10005;
int dp[n];
int val[n];
int weight[505];
int main()
for(int i=1;i<=m;++i)
dp[i]=inf; //初始條件
for(int i=1;i<=n;++i)
}if(dp[m]==inf)
printf("impossible");
else
printf("%d\n",dp[m]);
}return 0;
}
1079 PIPI的存錢罐
題目描述 pipi有n種硬幣,每種硬幣有特定的重量wei i 克和它對應的價值val i 已知有乙個承重量為m的存錢罐,當裡面正好裝著重量為m的硬幣時,問你這個存錢罐中硬幣的最小價值是多少?如果不可能存在m克的情況,那麼就輸出 impossible 輸入 多組輸入。第一行包括兩個整數n,m 1 n ...
小明的存錢計畫
時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 小明的零花錢一直都是自己管理。每個月的月初媽媽給小明300元錢,小明會預算這個月的花銷,並且總能做到實際花銷和預算的相同。為了讓小明學習如何儲蓄,媽媽提出,小明可以隨時把整百的錢存在她那裡,到了年末她會加上20 還給小明。因此小...
小明的存錢計畫
小明的存錢計畫 時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 小明的零花錢一直都是自己管理。每個月的月初媽媽給小明300元錢,小明會預算這個月的花銷,並且總能做到實際花銷和預算的相同。為了讓小明學習如何儲蓄,媽媽提出,小明可以隨時把整百的錢存在她那裡,到了年末她會加上20 ...