[关闭]
@VecMD 2016-07-10T02:23:35.000000Z 字数 1118 阅读 1380

CF 679B

  1. #include <map>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <utility>
  5. #include <iostream>
  6. #include <algorithm>
  7. const int maxn = 100007;
  8. long long cub[maxn], count;
  9. std::map<long long, std::pair<int, long long> > dp;
  10. std::pair<int, long long> find(long long x){
  11. if(x <= 7) return {x, x};
  12. int x1, x2; long long y1, y2;
  13. count ++;
  14. if(dp.find(x) != dp.end()) return dp[x];
  15. int k = std::upper_bound(cub, cub + 100003, x) - cub - 1;
  16. std::tie(x1, y1) = find(x - cub[k]);
  17. std::tie(x2, y2) = find(cub[k] - 1);
  18. return dp[x] = std::max(std::make_pair(x1 + 1, y1 + cub[k]), std::make_pair(x2, y2));
  19. }
  20. int main()
  21. {
  22. long long m;
  23. std::cin >> m;
  24. for(long long i = 1; i < maxn; i ++){
  25. cub[i] = i * i * i;
  26. }
  27. auto ans = find(m);
  28. std::cout << ans.first << ' ' << ans.second << '\n';
  29. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注