商汤科技:投嵌入式岗,笔试做的算法岗的题,这是直接挂我吗?
算法岗的选择题完全是机器学习的题,对于一个小白而言,完全就是懵逼,让后四道编程题,前两道题很简单,第三道题最优策略选择数组两端的数,分数高的获胜,属于博弈论题,按照要求做了,只能通过60%,代码如下:
#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { int n; cin >> n; vector<float> arr(n + 1, 0), arr2(n + 1, 0), array(n + 1, 0), sum(n + 1, 0); for (int i = 1; i <= n; ++i) { cin >> arr[i]; } for (int i = 1; i <= n; ++i) { float p = 1.0 / (1 + exp(-1 * arr[i])); if (i % 2 == 0) { arr2[i] = i + log(p); } else { arr2[i] = i + log(1 - p); } } vector<vector<double> > gain(n + 1, vector<double>(n + 1, 0)); for (int i = 1; i <= n; ++i) { array[i] = arr2[i]; sum[i] += sum[i - 1] + array[i]; gain[i][i] = array[i]; } for (int i = n - 1; i < array.size() && i>0; i--) { for (int j = i; j < array.size(); j++) { gain[i][j] = sum[j] - sum[i - 1] - min(gain[i + 1][j], gain[i][j - 1]); } } cout << gain[1][n] << " " << (sum[n] - gain[1][n]) << endl; if (gain[1][n]>(sum[n] - gain[1][n])) { cout << "TZ" << endl; } else { cout << "xtz" << endl; } system("pause"); return 0; }感觉测试样例的计算都是不对的,按照要求,第二个测试样例的答案是符合要求的,不知道是我的代码问题还是样本问题。求大佬ac代码。笔试应该是凉凉了。