fork download
  1. #include<stdio.h>
  2.  
  3. int actual,arr[102],n,b,sys[102],te[102][102],process[102];
  4. int get(int *count,int *batch,int counter)
  5. {
  6. int i,ans=0;
  7. if(counter==b)
  8. {
  9. for(i=0;i<n;i++)
  10. {
  11. if(count[i]==0)
  12. {
  13. ans+=arr[i];
  14. }
  15. }
  16. for(i=0;i<b;i++)
  17. {
  18. if(batch[i]==1)
  19. ans+=process[i];
  20. }
  21. return ans;
  22. }
  23.  
  24. //int max2;
  25. batch[counter]=1;
  26. for(i=0;i<sys[counter];i++)
  27. {
  28. count[te[counter][i]-1]++;
  29. }
  30. int max2=get(count,batch,counter+1);
  31. //printf("%d\n",max2);
  32. if(max2>actual)
  33. return max2;
  34. batch[counter]=0;
  35. for(i=0;i<sys[counter];i++)
  36. {
  37. count[te[counter][i]-1]--;
  38. }
  39. int max1=get(count,batch,counter+1);
  40. //printf("%d\n",max1);
  41. return max1>max2?max1:max2;
  42. }
  43. int main()
  44. {
  45. int i,j,val,ans,temp,count[102];
  46. int batch[102];
  47. //map<vector<int>,int > batch;
  48. //map<vector<int>,int >::iterator it;
  49. scanf("%d",&n);
  50. for(i=0;i<n;i++)
  51. {
  52. scanf("%d",&val);
  53. arr[i]=val;
  54. actual+=val;
  55. }
  56. for(i=0;i<n;i++)
  57. {
  58. count[i]=0;
  59. }
  60. scanf("%d",&b);
  61. for(i=0;i<b;i++)
  62. {
  63. batch[i]=0;
  64. }
  65. for(i=0;i<b;i++)
  66. {
  67. scanf("%d",&val);
  68. sys[i]=val;
  69. for(j=0;j<sys[i];j++)
  70. {
  71. scanf("%d",&temp);
  72. te[i][j]=temp;
  73. }
  74. scanf("%d",&temp);
  75. process[i]=temp;
  76. }
  77. ans=get(count,batch,0);
  78. printf("%d\n",ans-actual);
  79. //cout << "Hello World!" << endl;
  80. return 0;
  81. }
  82.  
Success #stdin #stdout 0s 2096KB
stdin
4
3 1 5 2
3
2 1 2 1
2 2 3 7
1 4 3
stdout
2