d904:換零錢
題目
https://zerojudge.tw/ShowProblem?problemid=d904
解題思路
- dp
- 把值一路跑過去 (image credit:碁峰資訊)
注意的地方
- c,n分別代表的意義,不要寫反!
- w的陣列大小要1000*10(+1)–w[10001]
Code
#include<bits/stdc++.h>
using namespace std;
int main(){
int c,n;//要給的錢總值、硬幣種類數
int a[11]={},w[10001]={};//幣值、錢的總值
while(cin>>c>>n){
for(int i=0;i<n;i++){
cin>>a[i];
}
memset(w,0x6f,sizeof(w));
w[0]=0;
for(int i=0;i<n;i++){
for(int j=a[i];j<=c;j++){
if(w[j-a[i]]+1<w[j]){
w[j]=w[j-a[i]]+1;
}
}
}
cout<<w[c]<<endl;
}
}