题解 | 取数游戏

取数游戏

https://www.nowcoder.com/practice/b467563ebc14407d842f0bb4680f52d8

//  #牛客春招刷题训练营# https://www.nowcoder.com/discuss/726480854079250432
//  最近写的都是这种题,枚举len的dp
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#define pre(i,j,k) for (int i = j; i < k; i++)
using namespace std;
int ans = 0;
int main() {
  ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
  int n;
  cin >> n;
  vector<int> a(n);
  pre(i, 0, n) cin >> a[i];
  vector<int> b(n);
  pre(i, 0, n) cin >> b[i];
  vector<vector<int>> dp(n, vector<int>(n, 0));
  pre(len, 1, n + 1){
    pre(i, 0, n){
      int j = i + len - 1;
      if (j >= n) break;
      if (i == j) dp[i][j] = a[i] * b[n - 1];//--------ps:这里别写成len-1了,虽然也能过4组样例
      else{
        dp[i][j] = max(dp[i][j - 1] + a[j] * b[n - len], dp[i + 1][j] + a[i] * b[n - len]);
		//------推导我是反过来看的看成一次放一个只能放在队列的左右两边,虽然情况不完全一样
      }
    }
  }
  cout << dp[0][n - 1];
  return 0;
}
// 64 位输出请用 printf("%lld")

#牛客春招刷题训练营##写题解领奖励#
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-18 12:01
点赞 评论 收藏
分享
zYvv:双一流加大加粗再标红,然后广投。主要是获奖荣誉不够,建议开始不用追求大厂,去别的厂子刷下实习。
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务