fork download
  1. //ASHU PANT MNNIT ALLD.
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. #define ll long long
  5. #define pr pair<int,int>
  6. #define mp make_pair
  7. #define inf 1000000000
  8. #define mod 1000000007
  9. #define fr first
  10. #define sc second
  11. #define scan(a) scanf("%d", &a)
  12. #define print(a) printf("%d",a)
  13. #define scanl(a) scanf("%lld", &a)
  14. #define printl(a) printf("%lld",a)
  15. #define nline printf("\n")
  16. #define fl(i,a,b) for(i=a; i<b; i++)
  17. #define fl1(i,a,b) for(i=a; i<=b; i++)
  18. #define rev(i,a,b) for(i=a; i>=b; i--)
  19. #define sspace printf(" ")
  20. //Variables and useful containers
  21. int t,m;
  22. vector<pr> v;
  23. int dp[11][1002];
  24. int maxmoney(int idx,int sum)
  25. {
  26. int ans,ctr=1;
  27. if(sum<=0||idx>=m)
  28. return 0;
  29. if(dp[idx][sum]!=-1)
  30. return dp[idx][sum];
  31. ans=maxmoney(idx+1,sum);
  32. while((sum-(ctr*v[idx].fr))>=0)
  33. {
  34. ans=max(ans,((ctr*v[idx].sc)+maxmoney(idx+1,sum-ctr*v[idx].fr)));
  35. ctr++;
  36. }
  37. return (dp[idx][sum]=ans);
  38. }
  39.  
  40. int main()
  41. {
  42. scan(t);
  43. while(t--)
  44. {
  45. v.clear();
  46. int amt,days,x,y,i,ans;
  47. scan(amt);
  48. scan(days);
  49. scan(m);
  50. int n=m;
  51. while(n--)
  52. {
  53. scan(x);
  54. scan(y);
  55. x/=1000;
  56. v.push_back(mp(x,y));
  57. }
  58. fl(i,0,days)
  59. {
  60. memset(dp,-1,sizeof(dp));
  61. ans=maxmoney(0,(int)(amt/1000));
  62. amt+=ans;
  63. }
  64. print(amt);
  65. nline;
  66. }
  67. return 0;
  68. }
  69.  
Success #stdin #stdout 0s 2904KB
stdin
3
1000 1
1
1000 100

100 1
2
7000 25
3000 10

10000 4
10
4000 400
3000 250
4000 400
3000 250
4000 400
3000 250
4000 400
3000 250
4000 400
3000 250
stdout
1100
100
14050