static int* Min; static int* Max; void LeastCoin2(int* Value, int Len, int *d, int Goal) { for(int i = 1; i <= Goal; i++) { for(int j = 0; j < Len; j++) { if(i >= Value[j]) { int distance = i - Value[j]; int temp1 = Min[distance] + 1; int temp2 = Max[distance] + 1; Min[i] = Min[i] < temp1 ? Min[i] : temp1; Max[i] = Max[i] > temp2 ? Max[i] : temp2; } } } } void WLeastCoin2(int* Value, int Len, int Goal) { int* d = new int [Goal+1]; if(d == NULL) { printf("malloc fail "); } memset(d, -1, sizeof(int)*(Goal+1)); d[0] = 0; printf("goal: %d ", Goal); Min = new int [Goal+1]; for(int i = 0; i < Goal+1; i++) { Min[i] = 1<<10; //不能太大,防止溢出 } Min[0] = 0; Max = new int [Goal+1]; memset(Max, 0, sizeof(int)*(Goal+1)); LeastCoin2(Value, Len, d, Goal); for(int i = 0; i <= Goal; i++) { printf("%d ", Min[i]);//Min[Goal] Min } printf(" "); for(int i = 0; i <= Goal; i++) { printf("%d ", Max[i]);//Max[Goal] Max } printf(" "); }