专栏文章
题解:P10010 [集训队互测 2023] Grievous Lady
P10010题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mins9x3g
- 此快照首次捕获于
- 2025/12/02 07:31 3 个月前
- 此快照最后确认于
- 2025/12/02 07:31 3 个月前
- 题目分析 这道题一眼搜索或者动规,因为我看不出来怎么动规,所以准备用搜索解这道题。 
- 题目做法 (1) 直接暴力搜索 (12pts) 我们将 当作题目中 , 数组的长度,将 当作搜索到哪一层了,这样我们便可以写出暴力代码: __int128 ans; __int128 x ,y; void dfs(int r,int c) { if(c==r+1) { __int128 s =x*y; if(s>ans) ans =s; return ; } x +=a[c].x; dfs(r,c+1); x -=a[c].x; y +=a[c].y; dfs(r,c+1); y -=a[c].y; }  此算法时间复杂度为 让我们再看看数据范围,,这不得直接 T 飞? (2) 整体贪心+局部搜索(100pts) 本蒟蒻也是看了第一篇题解才有的思路,我们发现,因为题目数据范围是随机的,并且值域非常大,所以 和 的值一般不会太接近,我们只需要取更大的那个数即可。 但是这样做会有缺点,如果有 和 比较接近的情况出现,便很容易举出反例,这一部分我们就只能用搜索解决。 于是,我们可以先将 , 数组以 为排序标准进行降序排列,然后取正中间的 个左右的断点进行枚举,先将断点左边大部分数和右边大部分数加入总数中,再暴力搜索断点附近的一些数更新答案就行了。 求总和的代码大概是这样: void sum(int k) { x =0,y=0; //确定搜索范围 int l=max(1,k-5),r=min(n,k+5); //整体贪心 for(int i=1;i<l;i++) x +=a[i].x; for(int i=r+1;i<=n;i++) y +=a[i].y; //局部搜索 dfs(r,l); }  这样就可以将这道题切掉了。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...