- 论坛徽章:
- 0
|
动态规划从低位到高位
- int find_first_big(int A[], int n, int digit)
- {
- int i;
- int B[10];
-
- for(i=0;i<10;i++)
- B[i] = 0;
-
- for(i=0;i<n;i++)
- B[A[i]] = 1;
-
- for(i=0;i<10-digit;i++)
- {
- if(B[digit+i]==1)
- {
- return digit+i;
- }
- }
- }
- int count_digit(int A[], int n, int digit)
- {
- if(digit>A[n-1])
- return (10 + A[0]);
- else
- return find_first_big(A, n, digit);
- }
- int* count_dp(int A[], int n, int num)
- {
- int i = 0;
- int* p = (int*)malloc(sizeof(int)*10);
- for(i=0;i<10;i++)
- p[i] = 0;
-
- while(num!=0)
- {
- p[len++] = num%10;
- num/=10;
- printf("p[%d]is %d\n", len-1, p[len-1]);
- }
-
-
- for(i=0;i<len;i++)
- {
- p[i] = count_digit(A, n, p[i]);
- p[i+1] += p[i]/10;
- p[i] %= 10;
-
- printf("p[%d] is %d\n", i, p[i]);
- printf("p[%d] is %d\n", i+1, p[i+1]);
-
- }
-
- return p;
- }
复制代码 |
|