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

泰安网站建设公司带高端网站设计

泰安网站建设公司带,高端网站设计,做迅雷下载电影类网站会侵权么,劳务派遣东莞网站建设NOIP2023模拟8联测29 C. 蛋糕 文章目录 NOIP2023模拟8联测29 C. 蛋糕题目大意思路code 题目大意 你现在得到了一个二维蛋糕,它从左到右可以分成 n n n 列,每列高为 a i a_i ai​ 。对于每一列,又可以从下到上分为 a i a_i ai​ 块&#x…

NOIP2023模拟8联测29 C. 蛋糕

文章目录

  • NOIP2023模拟8联测29 C. 蛋糕
    • 题目大意
    • 思路
    • code

题目大意

你现在得到了一个二维蛋糕,它从左到右可以分成 n n n 列,每列高为 a i a_i ai 。对于每一列,又可以从下到上分为 a i a_i ai 块,并且最上面一块权值为 1 1 1 ,从上到下权值依次加 。每一列的最上面的权值为 的块的上表面有“奶油”。

你现在要把这一个蛋糕分成若干个矩形,要求每一个矩形上都要有“奶油”,也即每个矩形要包含至少一个权值为 1 1 1 的块。显然蛋糕中的每一格都必须被划分到恰好一个矩形内,且矩形不能包含没有蛋糕的格子。

定义每一块矩形的代价为其每一行的最大值之和,即 ∑ i = l r ( max ⁡ j − = d u v i , j ) \sum_{i = l}^r(\max_{j -= d}^u v_{i , j}) i=lr(maxj=duvi,j) 。特别地,对于宽(列数)为 1 1 1 的矩形,代价为矩形内权值的最大值。请你最小化划分整个蛋糕的代价。

n ≤ 3000 n\le 3000 n3000

思路

考虑维护区间最大值和最小值的位置。

然后搞一个 d p l , r , k dp_{l , r , k} dpl,r,k 表示区间 [ l , r ] [l , r] [l,r] 内从下往上前 k k k 层的最小代价。

通过一通推理发现,对于一个区间 [ l , r ] [l , r] [l,r] 的最优策略就是删除最高的那一列或者把区间的所有蛋糕删到最矮的那一列那么高。

搞一个记忆化就好了

code

#include <bits/stdc++.h>
#define LL long long
#define fu(x , y , z) for(int x = y ; x <= z ; x ++)
using namespace std;
const int N = 3005;
int n , min1[N][N] , max1[N][N];
LL a[N];
map<LL , LL> dp;
LL gt (LL l , LL r , LL k) { return (l * (N + 1) + r) * N + k; }
LL getsum (LL x , LL y) { return (x + y) * (y - x + 1) / 2; }
LL solve (int l , int r , LL k) {LL id = gt (l , r , k);if (dp.count (id)) return dp[id];int mxd = max1[l][r] , mnd = min1[l][r];LL ans = a[mxd] - k;if (mxd > l) ans += solve (l , mxd - 1 , k);if (mxd < r) ans += solve (mxd + 1 , r , k);if (l != r) {LL ans1 = getsum (a[mxd] - a[mnd] + 1 , a[mxd] - k);if (l < mnd) ans1 += solve (l , mnd - 1 , a[mnd]);if (mnd < r) ans1 += solve (mnd + 1 , r , a[mnd]);ans = min (ans , ans1);}return dp[id] = ans;
}
int main () {freopen ("cake.in" , "r" , stdin);freopen ("cake.out" , "w" , stdout);scanf ("%d" , &n); fu (i , 1 , n) {scanf ("%lld" , &a[i]);}fu (l , 1 , n) {min1[l][l] = max1[l][l] = l;fu (r , l + 1 , n) {min1[l][r] = min1[l][r - 1] , max1[l][r] = max1[l][r - 1];if (a[min1[l][r - 1]] > a[r]) min1[l][r] = r;if (a[max1[l][r - 1]] < a[r]) max1[l][r] = r;}}
//	return 0;printf ("%lld" , solve (1 , n , 0));return 0;
}
http://www.ds6.com.cn/news/83599.html

相关文章:

  • 淘宝网站建设的主要工作站长统计app进入网址新版小猪
  • vue做的网站影响收录么百度推广关键词怎么设置好
  • 网站做seo安全吗aso安卓优化
  • wordpress怎么升级龙岩seo
  • 罗湖做网站哪家好网店代运营
  • 站点搭建app推广代理加盟
  • 教师做班级网站软文推广平台
  • 网站开发要用多少钱创建app平台
  • 什么是网站风格公司网站制作教程
  • 手机端便民服务平台网站建设电脑培训速成班多少钱
  • 制作个人网站的步骤做网络推广
  • 聊城市公司网站建站唐山百度提升优化
  • 移动终端开发如何网站优化排名
  • 做兼职网站有哪些优化公司组织架构
  • wordpress bookmark湖南正规seo优化报价
  • 上海公安手机门户网站重庆网站排名优化教程
  • 昆山做网站的国内推广平台有哪些
  • 广西建设教育学会网站建站合肥网络公司seo
  • 武汉网站建设排名营销培训课程
  • 网站手机端自适应百度指数官网移动版
  • 网站权重数据包常用的搜索引擎有
  • 河南做网站联系电话南昌网站优化公司
  • 电子商务学了有用吗seo英文
  • 女生做网站推广国内产女装一线二线品牌知乎
  • 照明设计师广州seo推广培训
  • 广州海珠区有什么大学网站搜索优化官网
  • 有做盆景的网站seo推广优化公司哪家好
  • wordpress sqliteseo快速提升排名
  • 网站运营需要做什么产品推广方式
  • 东营网站建设哪家好文明seo技术教程网