Advertisement
bkit4s0

[dp function] stack overflow error

Jan 1st, 2015
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.59 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #define MAX 10
  5. #define in "in.txt"
  6. #define out "out.txt"
  7. void split(char s[], char s1[], char s2[])
  8. {
  9.         int l, m;
  10.                 int i,j;
  11.         l = strlen(s);
  12.         m = l/2;
  13.         for (i = 0; i < m; ++i)
  14.         {
  15.                 s1[i] = s[i];
  16.                 //s2[i] = s[l - m + i]; // can't use to split s2
  17.         }
  18.                 s1[i] = '\0';
  19.                 for (i = m; i < l; ++i)
  20.         {
  21.                 s2[i-m] = s[i];
  22.         }
  23.                 s2[i-m] = '\0';
  24. }
  25. int numofA(char s[])
  26. {
  27.         int count;
  28.         count = 0;
  29.         for (int i = 0; i < strlen(s); ++i)
  30.         {
  31.                 if(s[i] == 'A')
  32.                         count++;
  33.         }
  34.         return count;
  35. }
  36. int max(int x, int y)
  37. {
  38.         int result;
  39.         if(x > y)
  40.                 result = x;
  41.         else
  42.                 result = y;
  43.         return result;
  44. }
  45. int hash(char s[])
  46. {
  47.         int result;
  48.         char s1[MAX], s2[MAX];
  49.         result = numofA(s);
  50.         if(strlen(s) > 1)
  51.         {
  52.                 split(s,s1,s2);
  53.                 result += max(hash(s1),hash(s2));
  54.         }
  55.         return result;
  56. }
  57. int dp(int v, int a, int e)
  58. {
  59.     int n;
  60.     int result = 0;
  61.     int a1,e1,v1,a2,e2,v2;
  62.     n = a+e;
  63.     for (a1 = 0; a1 <= a; ++a1)
  64.     {
  65.         a2 = a - a1;
  66.         e2 = n/2-a2;
  67.         e1 = e - e2;
  68.         for (v1 = 0; v1 <= v-a; ++v1)
  69.         {
  70.             for (v2 = 0; v2 < v-a; ++v2)
  71.             {
  72.                 if (max(v1,v2) == v-a)
  73.                 {
  74.                     result+=dp(v1,a1,e1)*dp(v2,a2,e2);
  75.                 }
  76.             }
  77.         }
  78.     }
  79.     return result;
  80. }
  81. void writefile(int res, int ndp)
  82. {
  83.         FILE *f;
  84.         f = fopen(out,"wt");
  85.         if(f==NULL)
  86.         {
  87.                 printf("Khong tao duoc file\n");
  88.                 exit(0);
  89.         }
  90.         fprintf(f, "%d\n", res);
  91.         fclose(f);
  92. }
  93. void readfile2handle()
  94. {
  95.         FILE *f;
  96.         int n;
  97.         int a,e,v;
  98.         int result;
  99.         f = fopen(in,"rt");
  100.         if(f==NULL)
  101.         {
  102.                 printf("Khong doc duoc file\n");
  103.                 exit(0);
  104.         }
  105.         fscanf(f,"%d",&n); // not scanf \n and backspace
  106.         for (int i = 0; i < n; ++i)
  107.         {
  108.                 fscanf(f, "%d\l", &a);
  109.                 fscanf(f, "%d\l", &e);
  110.                 fscanf(f, "%d\l", &v);
  111.                 result = dp(v,a,e);
  112.                 writefile(result,n);
  113.         }
  114.         fclose(f);
  115. }
  116. int main(int argc, char const *argv[])
  117. {
  118.         readfile2handle();
  119.         //printf("%d\n", dp(4,2,8));
  120.         system("pause");
  121.         return 0;
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement