腾讯算法笔试 第5题

腾讯算法笔试 第5题 能用动态规划吗?0那个要怎么做?#腾讯##笔试题目#
全部评论
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() {     int n;     cin >> n;     vector<int> work(n, 0);     vector<int> play(n, 0);     int dp1, dp2, lp1, lp2;     dp1 = dp2 = lp1 = lp2 = 0;     for (int i = 0; i < n; i++)         cin >> work[i];     for (int i = 0; i < n; i++)         cin >> play[i];     for (int i = 0; i < n; i++)     {         lp1 = dp1;         lp2 = dp2;         if (work[i] == 0 && play[i] == 0)         {             dp2 = dp1 = max(lp1, lp2);         }         else if (work[i] == 1 && play[i] == 1)         {             dp1 = max(lp1, lp2 + 1);             dp2 = max(lp2, lp1 + 1);         }         else if (work[i] == 1)         {             dp2 = max(lp1, lp2);             dp1 = max(lp1, lp2 + 1);         }         else         {             dp1 = max(lp1, lp2);             dp2 = max(lp2, lp1 + 1);         }     }     cout << n - max(dp1, dp2) << endl;     system("pause");     return 0; } AC
点赞 回复
分享
发布于 2019-08-17 22:19
算法都通过多少啊
点赞 回复
分享
发布于 2019-08-17 22:17
博乐游戏
校招火热招聘中
官网直投
import sys def get_score(n, nums): dp = [[0] * 3 for _ in range(n)] dp[0] = nums[0] state = [1] * 3 for i in range(3): if nums[0][i] == 0: state[i] == -1 for i in range(1, n): state1 = state[:] for j in range(3): # print(dp, state, nums[i]) cur_max = dp[i - 1][1] cur_idx = 1 for k in [-1, 0, 1]: last_idx = j + k if last_idx < 0 or last_idx > 2: continue cur_sum = dp[i - 1][last_idx] + state[last_idx] * nums[i][j] if cur_sum > cur_max: cur_max = cur_sum cur_idx = last_idx dp[i][j] = cur_max state1[j] = state[cur_idx] if nums[i][j] == 0: state1[j] *= -1 state = state1 return max(dp[-1]) if __name__ == "__main__": n = int(sys.stdin.readline().strip()) nums = [] for _ in range(n): nums.append(list(map(int, sys.stdin.readline().strip().split()))) print(get_score(n, nums)) 交卷了才调完,没测哈~
点赞 回复
分享
发布于 2019-08-17 22:21
#include <iostream> #include <vector> using namespace std; int main() { int n; cin>>n; vector<int> com(n); vector<int> train(n); vector<int> dppp(n); for(int i = 0;i < n;i++) cin>>com[i]; for(int i = 0;i < n;i++) cin>>train[i]; //0:表示工作,1:锻炼 , 2:休息 int num = 0; for(int i = 0;i < n;i++) { if(i == 0 || dppp[i-1] == 2) //随便选 , 只跟后面有关 { if(com[i] == 0 && train[i] == 0) { dppp[i] = 2 ; num++; }else if(com[i] == 1 && train[i] == 1) //两个都可以选 { if(i+1 < n) { if(com[i+1] == 1 && train[i+1] == 1 || (com[i+1] == 0 && train[i+1] == 0)) { dppp[i] = 2; } else { if(com[i+1] == 1) dppp[i] = 1; else dppp[i] = 0; } } else { } }else { if(com[i] == 1) dppp[i] = 0; else dppp[i] = 1; } }else { if(dppp[i-1] == 0) //前一天工作 { if(train[i] == 1) { dppp[i] = 1; }else { dppp[i] = 2; num++; } }else if(dppp[i-1] == 1) //前一天锻炼 { if(com[i] == 1) { dppp[i] = 0; }else { dppp[i] = 2; num++; } } } //cout<<i<<"  "<<dp[i]<<endl; }/* for(int i = 0;i < n;i++) cout<<dp[i]<<"   ";*/ cout<<num<<endl; return 0; } 瞎写的,然后过了
点赞 回复
分享
发布于 2019-08-17 22:24

相关推荐

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