fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int dp[(1<<17)-1][20],N,INF=2*pow(10,7),height[17],shrink[17];
  4.  
  5. int solve(int mask, int indeks)
  6. {
  7. if (mask==((1<<N)-1))
  8. return 0;
  9. if (dp[mask][indeks]!=-1)
  10. return dp[mask][indeks];
  11.  
  12. int ans=-INF,cnt=0;
  13. for (int i=0;i<N;i++)
  14. {
  15. int temp1=mask&(1<<i);
  16. if (temp1==0) //belum diambil
  17. {
  18. int temp=mask|(1<<i);
  19. if (height[i]-(shrink[i]*indeks)>=0)
  20. cnt=height[i]-(shrink[i]*indeks);
  21. else
  22. cnt=0;
  23.  
  24. ans=max(ans,solve(temp,indeks+1)+cnt);
  25. }
  26. }
  27. return dp[mask][indeks]=ans;
  28. }
  29.  
  30. int main()
  31. {
  32. ios_base::sync_with_stdio(false);
  33. int TC,i;
  34. cin>>TC;
  35.  
  36. while (TC--)
  37. {
  38. cin>>N;
  39. for (i=0;i<N;i++)
  40. cin>>height[i]>>shrink[i];
  41.  
  42. memset(dp,-1,sizeof(dp));
  43. cout<<solve(0,0)<<"\n";
  44. }
  45. return 0;
  46. }
Success #stdin #stdout 0s 25480KB
stdin
Standard input is empty
stdout
Standard output is empty