0基礎硬幣問題
阿新 • • 發佈:2017-05-22
name 硬幣問題 mod ont ++ -m 提高 硬幣 沒有
已知,有一批不同面值的硬幣,沒有硬幣個數限制。求得到S的全部組合,以及最小。最大硬幣個數。
最小、最大硬幣個數能夠用貪心法,可是不一定能夠得到有效解,可是能夠提高結題速度。此處略。
以下的解法比求解最大、最小硬幣比較耗時。
static int* set; static int Min = 1<<10; static int Max = 0; void LeastCoin(int* Value, int Len, int Goal, int cur) { if(Goal == 0) { for(int i = 0; i < cur; i++) { printf("%d ", set[i]); } if(cur > Max) { Max = cur; } if(Min > cur) { Min = cur; } printf("\n"); } else { for(int i = 0; i < Len; i++) { if(Goal >= Value[i]) { int ok = 1; for(int j = 0; j < cur; j++) { if(set[j] > Value[i]) { ok = 0; break; } } if(ok) { set[cur] = Value[i]; LeastCoin(Value, Len, Goal - Value[i], cur + 1); } } } } } void WLeastCoin(int* Value, int Len, int Goal) { printf("goal: %d\n", Goal); set = new int [Len]; memset(set, 0 , sizeof(int)*Len); int cur = 0; LeastCoin(Value, Len, Goal, cur); printf("Max:%d \n", Max); printf("Min:%d \n", Min); }
0基礎硬幣問題