当前位置: 首页 > news >正文

ZJYYC2360. 圆球的最大得分

思路:这是一道区间dp的题目。最大的数放在最远处会更优,所以每个小孩可以放在 l 处或 r 处,即这段区间的最左边或最右边。这题可以用记忆化搜索来写,用dp[l][r]来记录 i ~ j 之间调整位置后的最大得分。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl '\n'
#define pii pair<int,int>
const int N=2e3+5;
int dp[N][N];
pii v[N];
int dfs(int i,int l,int r){if(r<l) return 0;if(dp[l][r]!=-1) return dp[l][r];return dp[l][r]=max(v[i].first*abs(v[i].second-l)+dfs(i+1,l+1,r),v[i].first*abs(v[i].second-r)+dfs(i+1,l,r-1));// i 是排完序后的第 i 个值,max前一半是 第 i 大的值放在这段区间最左边,后一半是放在这段区间最右边。 
}
signed main(){int n;cin >> n;for(int i=1;i<=n;i++){int x;cin >> x;v[i]={x,i};}sort(v+1,v+n+1,greater<pii>());//从大到小排 memset(dp,-1,sizeof dp);//初始化 cout << dfs(1,1,n) << endl;return 0;
}

注:本题出自于AtCoder Beginner Contest 163 E - Active Infants改编。


http://www.mrgr.cn/news/44299.html

相关文章:

  • 【python实操】python小程序之定义类
  • 【Linux】Linux命令与操作详解(一)文件管理(文件命令)、用户与用户组管理(创建、删除用户/组)
  • cisco交换机命令大全
  • [SAP ABAP] 程序调用
  • 解决方案:batch_size跟epoch有什么不同
  • 学校周赛(3)
  • 【Llamaindex RAG实践】
  • CSS——文字打字机效果
  • 有趣幽默彩虹屁文案生成工具微信小程序源码
  • OpenAI预计明年将推出“代理”系统
  • Nacos-Feign-Gateway-SpringCloud微服务
  • 【机器学习】智驭未来:探索机器学习在食品生产中的革新之路
  • 《Linux从小白到高手》理论篇补充:深入理解Linux中的输入输出及重定向
  • 功耗电流图的对比技巧
  • 免费版U盘数据恢复软件大揭秘,拯救你的重要数据
  • Spring Boot 2.1.6.RELEASE 中,javax.persistence缺失问题
  • 数据结构与算法——Java实现 30.合并多个有序链表 小顶堆实现
  • Bellman-Ford算法和SPFA算法
  • python 实现贪婪合并排序算法
  • 【Blender Python】5.Blender场景中的集合