首页 > 其他分享 >P5336 [THUSC2016] 成绩单

P5336 [THUSC2016] 成绩单

时间:2024-07-10 10:34:30浏览次数:16  
标签:P5336 min int max mn mx THUSC2016 成绩单

P5336 [THUSC2016] 成绩单

考虑这个题, 他是随机抽一段, 然后剩下的又拼起来, 这不符合常规的区间DP。 因为他出现这样一种情况, 一段数中被扣出若干段, 剩下若干段。 如图:

image

红色的是被取出的, 黑色的是留下的, 考虑我们的 DP 需要包含这样的一个状态, 考虑这道题比较特殊, 虽然剩下的黑色段是散的, 我们不关心他什么样, 只需要知道 \(max\) 和 \(min\) 即可, 所以设状态 \(g[l][r][mn][mx]\) 表示区间 \([l, r]\) 扣掉若干块, 剩下的段的 \(min = mn\), \(max = mx\) 的最小代价。 我们的答案是全部取完, 设 \(f[l][r]\) 表示把区间 \([l, r]\) 全部取完的最小代价。 那么显然有:

$f[l][r] = max { g[1][n] + a + b \times (mx - mn)^2 } $。

\(g\) 的转移怎么想, 我们可以将状态分类, 上图的状态我们可以分为两类, 最后为为红色颜色段或者黑色颜色段两类, 这样我们 \(g[l][r][][]\), 就可以这么转移, 但是我们不好取一整段颜色段。 等价地:

  1. \(g[l][r][][]\) 可以推到 \(g[l][r + 1][][]\), 表示将 \(r + 1\) 归为黑色段。
  2. \(g[l][r][][]\), 可以枚举一个 \(k\), 由 \(g[l][k][][]\) 和 \(f[k + 1][r]\) 推过来, 相当于枚举红色段。

这样推过来就维护了所有的上图的状态。 问题就解决了。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N = 55;
int n, a, b, w[N], rw[N], g[N][N][N][N], f[N][N];
void chmin(int &x, int y) { x = min(x, y); }
void chmax(int &x, int y) { x = max(x, y); }
int main() {
	scanf("%d%d%d", &n, &a, &b);
	for(int i = 1; i <= n; i++) 
		scanf("%d", &w[i]), rw[i] = w[i];
	sort(rw + 1, rw + 1 + n);
	int cnt = unique(rw + 1, rw + 1 + n) - rw - 1;
	for(int i = 1; i <= n; i++) 
		w[i] = lower_bound(rw + 1, rw + 1 + cnt, w[i]) - rw;
	memset(f, 0x3f, sizeof f);
	memset(g, 0x3f, sizeof g);
	for(int i = 1; i <= n; i++) g[i][i][w[i]][w[i]] = 0;
	for(int len = 1; len <= n; len++) {
		for(int l = 1; l + len - 1 <= n; l++) {
			int r = l + len - 1;
			for(int mn = 1; mn <= cnt; mn++) {
				for(int mx = mn; mx <= cnt; mx++) {
					for(int k = l; k < r; k++)
						chmin(g[l][r][mn][mx], g[l][k][mn][mx] + f[k + 1][r]); 
					if(r < n) chmin(g[l][r + 1][min(w[r + 1], mn)][max(w[r + 1], mx)], g[l][r][mn][mx]);
					chmin(f[l][r], g[l][r][mn][mx] + a + b * (rw[mx] - rw[mn]) * (rw[mx] - rw[mn]));
				}
			}
		}
	}
	printf("%d", f[1][n]);
	return 0;
}

标签:P5336,min,int,max,mn,mx,THUSC2016,成绩单
From: https://www.cnblogs.com/qerrj/p/18293368

相关文章

  • 032java jsp ssm大学生第二课堂成绩单系统学生思想道德技术修养文体活动管理(源码+数据
     项目技术:SSM+Maven等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/101G......
  • ChatGPT周岁记:亲手写下成绩单,它给自己打了这样的分数
    2022年11月30日,这一天或许会被镌刻进人类历史的转折点——源自美国的人工智能研发翘楚OpenAI推出了对话式AIChatGPT,该事件不仅在全球AI业界掀起了新一轮高潮,更为罕见地被比肩为继“蒸汽机时代”、“智能手机时代”甚至“火的发现”之后的重大里程碑。此年间,被冠以“生成式人......
  • 成绩单
    学校尖子班\(65\)人。我的分数平均分名次语文9610040+数学10810233英语112?17科学13914962(shit)社会91?44总分548?52......
  • [THUSC2016] 补退选
    首先对于所有的字符串进行哈希构建两个哈希表,均为哈希值映射至vector我们约定一些东西方便表示\(v1\)表示第一个哈希表对应的vector,\(v2\)表示第二个哈希表对应的vector\(v1\)中元素表示当前该前缀对应所有操作编号(可能不正确,但是没影响,具体看下面的注意标注的地方)第二......
  • TDengine 2023 年成绩单“曝光”,六大维度彰显卓越成就
    今天,我们进行了2023年重大成就和发展成绩盘点,主要归纳为产品创新、市场发展、开源社区、生态建设、活动布道与奖项荣誉六大维度。在元旦前夕,我们也想把这份“2023年成绩单”分享给所有关注TDengine的朋友们。在今年,最值得一提的大事件就是伴随着六月的网站改版,TDengine正式......
  • 公开课考试成绩单
    所有测验成绩单如下:1.2.3.4.5.6.7.8.9.期末: ......
  • P5336 [THUSC2016] 成绩单
    这得是区间dp。还需要限制一下值域。因此dp状态时\(f_{l,r,x,y}\)表示使\([l,r]\)区间所有值都处于\([x,y]\)的最小花费。设\(g_{l,r}=\min\{f_{l,r,x,y}+a+b(x-y)^2\}\)。思考一个序列可以被怎么消掉。维护一个类似括号序列的东西,左右匹配的括号......
  • 基于Java的大学生考勤系统的设计与实现(亮点:多角色、打卡签到、请假审批、上传成绩单文
    (高校学生综合测评管理系统)三、开发环境与技术3.1MySQL数据库本课题研究研发的应用程序在数据操作过程中是难以预测的,而且常常产生变化。没有办法直接从word里写数据,这不但不安全,并且难以实现应用程序的功能。想要实现运用所需要的数据存放功能,就必定要选择专业的数据库存储软......
  • 从期中成绩单,看长城汽车加速转型的“孤峰优势”
    文|螳螂观察作者|易不二年初特斯拉的降价风波让不少车企都选择跟牌,汽车市场的价格厮杀,在上半年表现的格外激烈。但“价格内卷”之下,消费者对产品体验感与科技感的追求却日益严苛,这也使得自主、合资和外资品牌争相推出新产品、新技术提高竞争门槛,试图走出“价格内卷”的漩涡。随......
  • 第14周项目3-多科成绩单(1)(2)
    问题及代码:/**Copyright(c)2014,烟台大学计算机学院*Allrightsreserved.*文件名称:MADE64.cpp*作者:孙化龙*完成日期:2014年12月2日*版本号:v1.0**问题描述:某班不超过100名同学。用二维数组score[][4]保存同学们的高数、英语、C++成绩及总成绩(在此假设学生......