Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. char mm[82][31];
  8. int mi[82][82],mp[10][10];
  9. int n,c,nrmed,m,Min=9000;
  10. int x[10];
  11.  
  12. int Pret(char *p)
  13. {
  14. int x=0;
  15. while(*p)
  16. {
  17. x=x*10+(*p-'0');
  18. p++;
  19. }
  20. return x;
  21. }
  22.  
  23. void Act_MM_MP(char s[],int i)
  24. {
  25. int k=0;
  26. char sep[]=": ,";
  27. char *p=strtok(s,sep);
  28. p=strtok(NULL,sep);
  29. while(p)
  30. {
  31. nrmed++;
  32. strcpy(mm[nrmed],p);
  33. p=strtok(NULL,sep);
  34. k++;
  35. mp[i][k]=Pret(p);
  36. p=strtok(NULL,sep);
  37. }
  38. mp[i][0]=k;
  39. }
  40.  
  41. int Cautare(char *p)
  42. {
  43. for(int i=1;i<=nrmed;i++)
  44. if(!strcmp(p,mm[i]))
  45. return i;
  46. }
  47.  
  48. void Act_MI(char s[])
  49. {
  50. int m1,m2;
  51. char *p=strtok(s,"/");
  52. m1=Cautare(p);
  53. p=strtok(NULL,"/");
  54. m2=Cautare(p);
  55. mi[m1][m2]=mi[m2][m1]=1;
  56. }
  57.  
  58. void Citire()
  59. {
  60. char s[701];
  61. ifstream f("farma.in");
  62. f>>c>>n;
  63. for(int i=1;i<=n;i++)
  64. {
  65. f.get();
  66. f.get(s,701);
  67. Act_MM_MP(s,i);
  68. }
  69. f>>m;
  70. for(int i=1;i<=m;i++)
  71. {
  72. f.get();
  73. f.get(s,100);
  74. Act_MI(s);
  75. }
  76. f.close();
  77. }
  78.  
  79.  
  80. int Valid(int k)
  81. {
  82. int s1=0,s=0,i,j;
  83. for(i=1;i<k;i++)
  84. s1+=mp[i][0];
  85. s1+=x[k];
  86. for(i=1;i<k;i++)
  87. {
  88. s=0;
  89. for(j=1;j<i;j++)
  90. s+=mp[i][0];
  91. s+=x[i];
  92. if(mi[s1][s])
  93. return 0;
  94. }
  95. return 1;
  96. }
  97.  
  98.  
  99. void Act_Min(int k)
  100. {
  101. int s=0;
  102. for(int i=1;i<=k;i++)
  103. s+=mp[i][x[i]];
  104. if(s<Min)
  105. Min=s;
  106. }
  107.  
  108. void Bk(int k)
  109. {
  110. int i;
  111. for(i=1;i<=mp[k][0];i++)
  112. {
  113. x[k]=i;
  114. if(Valid(k))
  115. if(k==n) Act_Min(k);
  116. else Bk(k+1);
  117. }
  118. }
  119.  
  120. void Afis1()
  121. {
  122. for(int i=1;i<=n;i++)
  123. cout<<mp[i][0]<<"\n";
  124. }
  125.  
  126. void Afis2()
  127. {
  128. cout<<Min;
  129. }
  130.  
  131.  
  132. int main()
  133. {
  134. Citire();
  135. Bk(1);
  136. if(c==1) Afis1();
  137. else Afis2();
  138. return 0;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement