Advertisement
Dorijanko

Thonk2

Nov 29th, 2018
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.52 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int l,n,m[1001],a;
  6. int pr1[1001][1001];
  7. int h[1001][1001],mi[1001][1001],s[1001][1001];
  8. int ti[51][30001];
  9. int pr2[1001][1001];
  10. int dp[51][30001];
  11. vector<int> ho[51][30001];
  12. bool bio[51][30001];
  13. int mat[1001];
  14. int wh[1001];
  15. int re[1001];
  16. int mgc;
  17. const int MAXGEMS=20000;
  18. const int HAR=0;
  19.  
  20. int dp1(int i,int j)
  21. {
  22. if (j<0) return MAXGEMS;
  23. if (i<0) return 0;
  24. if (bio[i][j]) return dp[i][j];
  25. bio[i][j]=1;
  26. int mi=-1;
  27. for (int k=0;k<m[i];++k)
  28. {
  29. if (i==0 && pr1[i][k]<HAR*60) continue;
  30. if (mi==-1 || pr2[i][k]+dp1(i-1,j-pr1[i][k])<pr2[i][mi]+dp1(i-1,j-pr1[i][mi]) ||
  31. ((pr2[i][k]+dp1(i-1,j-pr1[i][k])==pr2[i][mi]+dp1(i-1,j-pr1[i][mi])) && (ti[i-1][j-pr1[i][k]]<ti[i-1][j-pr1[i][mi]]))) mi=k;
  32. }
  33. if (j-pr1[i][mi]<0) return dp[i][j]=MAXGEMS;
  34. if (mi==-1) return dp[i][j]=MAXGEMS;
  35. if (i==0)
  36. {
  37. vector<int> o;
  38. o.push_back(mi);
  39. ho[i][j]=o;
  40. ti[i][j]=pr1[i][mi];
  41. }
  42. else
  43. {
  44. vector<int> o=ho[i-1][j-pr1[i][mi]];
  45. o.push_back(mi);
  46. ho[i][j]=o;
  47. ti[i][j]=pr1[i][mi]+ti[i-1][j-pr1[i][mi]];
  48. }
  49. return dp[i][j]=pr2[i][mi]+dp1(i-1,j-pr1[i][mi]);
  50. }
  51.  
  52. int main()
  53. {
  54. std::ios_base::sync_with_stdio(false);
  55. cin>>l>>a;
  56. cin>>n;
  57. l*=1440;
  58. l+=a*60;
  59. for (int i=0;i<n;++i)
  60. {
  61. cin>>m[i];
  62. for (int j=0;j<m[i];++j)
  63. {
  64. cin>>h[i][j]>>mi[i][j]>>s[i][j]>>pr2[i][j];
  65. mi[i][j]+=s[i][j]/60;
  66. s[i][j]%=60;
  67. h[i][j]+=mi[i][j]/24;
  68. mi[i][j]%=24;
  69. pr1[i][j]=h[i][j]*1440+mi[i][j]*60+s[i][j];
  70. }
  71. }
  72. for (int i=n-1;i>=0;--i)
  73. {
  74. mat[i]=mat[i+1]+pr1[i][m[i]-1];
  75. }
  76. l+=2880;
  77. for (int o=0;o<20 && l>=HAR;++o)
  78. {
  79. for (int i=0;i<n;++i)
  80. {
  81. for (int j=0;j<l;++j)
  82. {
  83. bio[i][j]=0;
  84. dp[i][j]=0;
  85. ho[i][j].clear();
  86. }
  87. }
  88. mgc=dp1(n-1,l);
  89. l-=480;
  90. if (mgc==0) continue;
  91. l+=480;
  92. bool ima=0;
  93. for (int i=0;i<n;++i)
  94. {
  95. //cout<<ho[n-1][l].size()<<endl;
  96. re[i]=ho[n-1][l][i];
  97. if (mi[i][re[i]]%8)
  98. {
  99. cout<<"On quest "<<i+1<<", use "<<pr2[i][re[i]]<<" gems at "<<h[i][re[i]]<<" days and "<<mi[i][re[i]]<<" hours."<<endl;
  100. ima=1;
  101. }
  102. else cout<<"On quest "<<i+1<<", use "<<pr2[i][re[i]]<<" gems after "<<(mi[i][re[i]]/8+h[i][re[i]]*3)<<" collections, not including the first one."<<endl;
  103. }
  104. cout<<"Total gem cost: "<<mgc<<" gems."<<endl;
  105. if (ima) cout<<"Total time: "<<ti[n-1][l]/1440<<" days and "<<(ti[n-1][l]%1440)/60<<" hours.";
  106. else cout<<"Total collections(not including the first one on each node): "<<ti[n-1][l]/480<<".";
  107. cout<<endl<<endl<<endl;
  108. l-=480;
  109. }
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement