贝壳找房08-10 算法岗部分题目及解答

贝壳找房算法岗题目及解答 2019-08-10
第三题:锯子和斧头轮流砍树问题。第一行输入树的个数n, 接下来的n行,每行分别输入三个数,分别代表用锯子和斧头砍该棵树的时间以及换工具砍树所需要的时间。已知第一棵树用斧头砍,求依次砍n棵树所需要的最少时间。题目给定案例:
输入:
3
20 40 20
10 4 25
90 100 5
输出:139
以下是我的代码,只通过了9%,但在本地测试很多都通过,不知道是否还有什么没考虑到,求大佬指教。
#include <iostream>
#include <vector>
#include <numeric>
#include <limits>
using namespace std;

int main() {
int n;
cin >> n;
int a, b, c;
vector<vector<int> > v; //保存输入的n组数据
for (int i = 0; i<n; i++) {
vector<int> v2;
cin >> a >> b >> c;
v2.push_back(a);
v2.push_back(b);
v2.push_back(c);
v.push_back(v2);
}

int res = 0;
res += v[0][1];
int pos = 1; //pos记录当前是斧头(1)还是锯子(0)
for (int i = 1; i<n; i++)
{
if (pos == 1 && v[i][pos] < v[i][pos - 1]) { res += v[i][pos];  continue; }
if (pos == 1 && v[i][pos] > v[i][pos - 1]) { res += v[i][pos - 1];  res += v[i][2];  pos = 0;  continue;}
if (pos == 0 && v[i][pos]<v[i][pos + 1]) { res += v[i][pos];  continue; }
if (pos == 0 && v[i][pos] > v[i][pos + 1]) { res += v[i][pos + 1];   res += v[i][2]; pos = 1; continue; }
}

cout << res << endl;
return 0;
}

#贝壳找房##笔试题目##秋招#
全部评论
局部最优不是全局最优
点赞 回复 分享
发布于 2019-08-10 21:43
#include <iostream> #include <vector> #include <string.h> #include <algorithm> #include <map> #include<set> #include <unordered_map> #include <unordered_set> #include <math.h> using namespace std; int main() {     int n;     while(cin>>n){         vector<int> a(n, 0);         vector<int> b(n, 0);         vector<int> c(n, 0);         vector<int> dpa(n,0);         vector<int> dpb(n,0);         for(int i=0; i<n; ++i){             cin>>a[i];             cin>>b[i];             cin>>c[i];         }         dpa[0]=c[0]+a[0];         dpb[0]=b[0];         for(int i=1; i<n; ++i){             dpa[i] = min(dpa[i-1]+a[i], dpb[i-1]+c[i]+a[i]);             dpb[i] = min(dpb[i-1]+b[i], dpa[i-1]+c[i]+b[i]);         }         int res = dpa[n-1]<dpb[n-1] ? dpa[n-1]:dpb[n-1];         cout<<res<<endl;     }     return 0; }
点赞 回复 分享
发布于 2019-08-10 21:23
卧槽 一毛一样 9% 二阶动态规划做的
点赞 回复 分享
发布于 2019-08-10 21:27
用贪心的结果是 18%
点赞 回复 分享
发布于 2019-08-10 21:38
我也百分之9,感觉就是维特比算法,不知道错在哪里了
点赞 回复 分享
发布于 2019-08-10 21:54
time = [[0] * 2 for _ in range(n)] time[0][0] = a[0] + c[0] time[0][1] = b[0] for i in range(1, n):     time[i][0] = min(time[i-1][0] + a[i], time[i-1][1] + a[i] + c[i])     time[i][1] = min(time[i-1][0] + b[i] + c[i], time[i-1][1] + b[i]) print (min(time[-1][0], time[-1][1])) 这个应该是AC的。。
点赞 回复 分享
发布于 2019-08-10 22:22
这题直接输出139就有9%
点赞 回复 分享
发布于 2019-08-11 09:24

相关推荐

点赞 18 评论
分享
牛客网
牛客企业服务