当前位置:   article > 正文

大疆笔试 最优收费方案_大疆无人机飞丢数据分析收费吗

大疆无人机飞丢数据分析收费吗

典型的动态规划问题,不过一些细节处理起来还是很糟心的,可以参考https://www.cnblogs.com/leokale-zz/p/12381855.html的解析

现在有一个服务收费方案:在时间段1st<6内,每单位时间收费为10元;在时间段
6st<10内,每单位时间收费为5元;在时间段tz10,每单位时间收费为2元。该服务
同时只能为一个用户服务,假如有一批用户都需要请求该服务,请编写一段程
序,选择出若干用户请求进行服务,使得总的收费达到最多,并打印出依次服务
的用户编号。

输入描述
输入数据有1行,包含每个用户的编号、开始服务时间和结束服务时间(中
间以空格隔开,用户间以逗号和空格隔开)。上面例子的输入如下:
114.226,3312.4610
“1 1 4"中的第1个1代表用户编号为1,第2个1代表的是开始服务时间,4代
表结束服务时间,总的服务时间为4 -1-3,对应的费用为(4 1)*10-30;
“22 6"中的第1个2代表用户编号为2,第2个2代表的是开始服务时间,6代
表结束服务时间,总的服务时间为6 2=4,对应的费用为(6- 2)*10=40;
"33 12"中的第1个3代表用户编号为3,第2个3代表的是开始服务时间,12
代表结束服务时间,总的服务时间为12- 3=9,对应的费用为(6-3)*10+(10-
6)*5+(12-10)*2=54;
“46 10”中的4代表用户编号为4,6代表的是开始服务时间,10代表结束服
务时间,总的服务时间为10-6-4, 对应的费用为(10-6)*5-20。
输出描述
60,24
其中,60代表的是最多的总费用(其中包括用户2的40和用户4的20) 中间
以逗号和空格隔开,*2 4"代表的是依次服务的用户编号。
样例输入
1 1 4.226,3312, 4610
样例输出
60,24
 

  1. /*功能:*/
  2. #include "./stdc++.h"
  3. using namespace std;
  4. int monye(int start, int end) {
  5. int res = 0;
  6. if (end < 6) {
  7. return (end - start) * 10;
  8. }
  9. if (end < 10) {
  10. if (start < 6) {
  11. res += (6 - start) * 10;
  12. }
  13. res += (end - 6) * 5;
  14. }
  15. if (end >= 10) {
  16. if (start < 6) {
  17. res += (6 - start) * 10;
  18. res += 4 * 5;
  19. }
  20. else if (start < 10) {
  21. res += (10 - start) * 5;
  22. }
  23. res += (end - 10) * 2;
  24. }
  25. return res;
  26. }
  27. int main() {
  28. string line = "1 1 4, 2 2 6, 3 3 12, 4 6 10";
  29. // cin>> line;
  30. // cout<< "60, 2 4"<<endl;
  31. string item;
  32. // getline(cin,line);
  33. // cout<< line<<endl;
  34. istringstream items(line);
  35. deque<string> st1;
  36. stack<string> st2;
  37. vector<vector<int>> vec;
  38. int cnt = 1;
  39. vector<int> tmp(3);
  40. while (items >> item)
  41. {
  42. switch (cnt)
  43. {
  44. case 1:
  45. tmp[0] = atoi(item.c_str());
  46. cnt++;
  47. break;
  48. case 2:
  49. tmp[1] = atoi(item.c_str());
  50. cnt++;
  51. break;
  52. case 3:
  53. cnt = 1;
  54. if(item[item.size() - 1] == ',')
  55. tmp[2] = atoi(item.erase(item.size() - 1).c_str());
  56. else
  57. {
  58. tmp[2] = atoi(item.c_str());
  59. }
  60. vec.push_back(tmp);
  61. default:
  62. break;
  63. }
  64. }
  65. int n = vec.size();
  66. vector<int> dp(n, 0);
  67. vector<int> pre(n, 0);
  68. vector<vector<int>> id;
  69. for (int i = n - 1; i >= 0; --i) {
  70. for (int j = i - 1; j >= 0; --j) {
  71. if (vec[j][2] <= vec[i][1]) {
  72. pre[i] = j;
  73. break;
  74. }
  75. }
  76. }
  77. for (int i = 0; i < n; ++i) {
  78. if (i == 0) {
  79. dp[i] = monye(vec[i][1], vec[i][2]);
  80. vector<int> tmp;
  81. tmp.push_back(vec[i][0]);
  82. id.push_back(tmp);
  83. continue;
  84. }
  85. if (pre[i] == 0) {
  86. int tmpMonye = monye(vec[i][1], vec[i][2]);
  87. if (tmpMonye > dp[i - 1]) {
  88. dp[i] = tmpMonye;
  89. vector<int> tmp;
  90. tmp.push_back(vec[i][0]);
  91. id.push_back(tmp);
  92. }
  93. else {
  94. dp[i] = dp[i - 1];
  95. vector<int> id_tmp;
  96. for (auto num : id[i - 1]) {
  97. id_tmp.push_back(num);
  98. }
  99. id.push_back(id_tmp);
  100. }
  101. }
  102. else {
  103. int tmpMonye = monye(vec[i][1], vec[i][2]) + dp[pre[i]];
  104. if (tmpMonye > dp[i - 1]) {
  105. dp[i] = tmpMonye;
  106. vector<int> id_tmp;
  107. for (auto num : id[pre[i]]) {
  108. id_tmp.push_back(num);
  109. }
  110. id.push_back(id_tmp);
  111. id[id.size() - 1].push_back(vec[i][0]);
  112. }
  113. else {
  114. dp[i] = dp[i - 1];
  115. vector<int> id_tmp;
  116. for (auto num : id[i - 1]) {
  117. id_tmp.push_back(num);
  118. }
  119. id.push_back(id_tmp);
  120. }
  121. }
  122. }
  123. cout << dp[dp.size() - 1] << ", ";
  124. for (auto i : id[id.size() - 1]) {
  125. cout << i << " ";
  126. }
  127. return 0;
  128. }
  129. // hello undo redo world.
  130. //1 1 4, 2 2 6, 3 3 12, 4 6 10

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/994118
推荐阅读
相关标签
  

闽ICP备14008679号