Skip to content

Commit aeae3c5

Browse files
湊到某個價位的最少硬幣用量 changing making problem
1 parent 1681efb commit aeae3c5

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

TOI_NOI/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
## 說明
2+
3+
### DP(動態規劃)
4+
[[d904]](https://zerojudge.tw/ShowProblem?problemid=d904)[[解答]](https://github.com/XassassinXsaberX/zerojudge/blob/master/TOI_NOI/d904.cpp) (湊到某個價位的最少硬幣用量 changing making problem)
5+
6+
7+

TOI_NOI/d904.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#include <iostream>
2+
#include <stdio.h>
3+
#include <stdlib.h>
4+
#define INFINITE 1000000
5+
6+
using namespace std;
7+
8+
/*
9+
換零錢的dp問題
10+
湊到某個價位的最少硬幣用量 changing making problem
11+
*/
12+
13+
int main()
14+
{
15+
int C,N;
16+
int dp[1001];
17+
int coin[10];
18+
int i,j,k;
19+
20+
while(scanf("%d %d",&C,&N)!=EOF)
21+
{
22+
//目標是最少硬幣數,來收集到C元
23+
//共有N個硬幣
24+
25+
for(i=0;i<N;i++)
26+
cin>>coin[i];
27+
28+
//先初始化dp陣列
29+
for(i=0;i<=C;i++)
30+
dp[i] = INFINITE;
31+
dp[0] = 0;
32+
33+
//接下來開始進行動態規劃
34+
for(i=0;i<N;i++)
35+
for(j=0;j+coin[i]<=C;j++)
36+
{
37+
//dp[j]代表目前湊到 j元 需要多少個硬幣
38+
if(dp[j] + 1 < dp[j+coin[i]])
39+
dp[j+coin[i]] = dp[j]+1;
40+
41+
}
42+
43+
cout<<dp[C]<<endl;
44+
}
45+
return 0;
46+
47+
48+
}

0 commit comments

Comments
 (0)