首页 > 编程语言 >能量项链(C++)

能量项链(C++)

时间:2024-06-15 20:57:15浏览次数:21  
标签:head 标记 int C++ 300 珠子 项链 能量

题目描述
在喵星星球上,每个喵星人都随身佩带着一串能量项链。在项链上有 N 颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是 喵星人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为 m,尾标记为 r,后一颗能量珠的头标记为 r,尾标记为 n,则聚合后释放的能量为 m×r×n(喵星单位),新产生的珠子的头标记为 m,尾标记为 n。

需要时,喵星人就用吸盘夹住相邻的两颗珠子,通过聚合得到能量,直到项链上只剩下一颗珠子为止。显然,不同的聚合顺序得到的总能量是不同的,请你设计一个聚合顺序,使一串项链释放出的总能量最大。

例如:设 N=4,4 颗珠子的头标记与尾标记依次为 (2,3)(3,5)(5,10)(10,2)。我们用记号 ⊕ 表示两颗珠子的聚合操作,(j⊕k) 表示第 j,k 两颗珠子聚合后所释放的能量。则第 4,1 两颗珠子聚合后释放的能量为:

(4⊕1)=10×2×3=60。

这一串项链可以得到最优值的一个聚合顺序所释放的总能量为:

(((4⊕1)⊕2)⊕3)=10×2×3+10×3×5+10×5×10=710。

输入格式
第一行是一个正整数 N(4≤N≤100),表示项链上珠子的个数。第二行是 N 个用空格隔开的正整数,所有的数均不超过 1000。第 i 个数为第 i 颗珠子的头标记(1≤i≤N),当 i<N 时,第 i 颗珠子的尾标记应该等于第 i+1 颗珠子的头标记。第 N 颗珠子的尾标记应该等于第 1 颗珠子的头标记。

至于珠子的顺序,你可以这样确定:将项链放到桌面上,不要出现交叉,随意指定第一颗珠子,然后按顺时针方向确定其他珠子的顺序。

输出格式
一个正整数 E(E≤2.1×109),为一个最优聚合顺序所释放的总能量。

样例 #1
样例输入 #1
4
2 3 5 10
样例输出 #1
710

方法一:

#include<bits/stdc++.h>
using namespace std;
int n, f[300][300], ans = INT_MIN, head[300], tail[300];

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> head[i];
		head[i + n] = head[i];
	}
	for (int i = 1; i < n * 2; i++) {
		tail[i] = head[i + 1];
		f[i][i] = 0;
	}
	tail[2 * n] = head[1];
	for (int len = 1; len < n; len++)
		for (int i = 1; i <= 2 * n - len; i++) {
			for (int k = i; k < i + len; k++)
				f[i][i + len] = max(f[i][i + len], f[i][k] + f[k + 1][i + len] + head[i] * tail[k] * tail[i + len]);
		}
	for (int i = 1; i <= n; i++)
		ans = max(f[i][i + n - 1], ans);
	cout << ans;
	return 0;
}

方法二: 

#include<bits/stdc++.h>
using namespace std;
int n, f[300][300], ans = INT_MIN, head[300], tail[300];

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> head[i];
		head[i + n] = head[i];
	}
	for (int i = 1; i < n * 2; i++) {
		tail[i] = head[i + 1];
		f[i][i] = 0;
	}
	tail[2 * n] = head[1];
	for (int len = 1; len < n; len++)
		for (int i = 1; i <= 2 * n - len; i++) {
			for (int k = i; k < i + len; k++)
				f[i][i + len] = max(f[i][i + len], f[i][k] + f[k + 1][i + len] + head[i] * tail[k] * tail[i + len]);
		}
	for (int i = 1; i <= n; i++)
		ans = max(f[i][i + n - 1], ans);
	cout << ans;
	return 0;
}

 

标签:head,标记,int,C++,300,珠子,项链,能量
From: https://blog.csdn.net/qxh10/article/details/139708359

相关文章

  • 美发店管理系统(C++ 课程设计)含源码,设计文档
    目录一、成员分工1二、需求分析2三、总体设计3四、详细设计4五、系统测试30六、总结32七、参考文献33一成员分工我们小组成员共有两名,分别是李书文、卢增凌、张晗,为了能按时圆满的完成这次C++课程设计,我们小组进行了详细的分工,以确保设计能按时完成。经过周密的考虑......
  • 【NOI】C++程序结构入门之循环结构三——break、continue
    文章目录前言一、循环的流程控制1.1导入1.2循环的打破与跳过1.2.1break打破1.2.2continue跳过1.2.3总结二、例题讲解问题:1468.小鱼的航程问题:1074-小青蛙回来了问题:1261.韩信点兵问题:1254.求车速问题:1265.爱因斯坦的数学题三、总结四、感谢前言循环......
  • c++11新特性之关键字(关于auto、nullptr)
    1.auto用途:用于编译器自动推断出变量类型,这里列举几种比较典型的情况:(1)自动类型推导autox=10;//x的类型是intautoy=3.14;//y的类型是doubleautoz='c';//z的类型是char(2)与迭代器一起使用:当处理STL容器时,auto可以帮助我们自动推导迭代......
  • C++内联函数、内联函数的概念、内联函数的特性、auto关键字、类型名字的问题、auto使
    文章目录前言一、内联函数1.内联函数概念2.内联函数特性二、auto关键字(C++11)1.类型名字的问题2.auto简介3.auto的使用细则1.auto与指针和引用结合起来用2.auto在同一行定义多个变量4.auto不能推导的场景1.auto不能作为函数的参数2.auto不能直接用来声明数组3......
  • C++学习手册
    创建一份全面的C++学习手册是一个庞大的任务,但这里我可以为你提供一个基础的大纲和一些关键点,以帮助你开始学习C++。###C++学习手册大纲####第一部分:C++简介1.C++的历史与发展2.C++的特点3.C++的应用领域4.开发环境的搭建####第二部分:基础语法1.基本数据类型2......
  • 【C++】C++11新特性
    C++11是C++程序设计语言标准的一个新的版本,在2011年由ISO批准并发布。C++11新标准从而代替了原来的C++98和C++03.。C++11标准是对C++的一次巨大的改进和扩充。在核心语法,STL标准模板等方面增加众多新功能。例如新增auto,deltype,nullptr等关键字,增加范围for......
  • 球面双站定位c++源码及原理介绍(已知2点经纬高及看向目标的方位、俯仰,求目标的经
    球面双站定位是一个空间几何问题,它用于在给定两个已知站点的经纬度和他们向特定目标看去的方位和俯仰角的情况下,计算目标的经纬度。这个问题可以通过解一个线性方程组来求解。假设两个站点分别是A和B,他们分别看向目标的方位分别是θAθA​和θBθB​,俯仰角分别是ϕAϕA​和ϕBϕB......
  • C++:特殊类
    文章目录不能拷贝的类C++98C++11只能在堆上创建对象的类只能在栈上创建对象的类不能被继承的类C++98C++11单例模式饿汉模式饿汉模式不能拷贝的类拷贝只会发生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数......
  • C++:智能指针
    文章目录背景内存泄漏内存泄漏的危害内存泄漏的分类堆内存泄露(HeapLeak)系统资源泄露如何避免内存泄漏智能指针的使用和原理RAII智能指针地原理auto_ptrunique_ptrshared_ptrshared_ptr的循环引用定制删除器背景由于C++11中引入了异常的概念,而异常会影响执行流,......
  • C++多线程:生产者消费者模式
    文章目录一、模式简介二、头文件、全局变量2.1仓库类的设计2.1.1关于仓库类的分析2.1.2仓库类的设计代码2.2工厂类的设计2.2.1关于工厂类的分析2.2.2工厂类的设计代码a将产品item放到仓库repob将产品item从仓库repo取出c生产者操作d消费者操作2.2.3主函数代......