石子合并/能量项链【区间dp】
题目链接:http://www.51mxd.cn/problem.php-pid=737.htm
题目大意:给出n个石子堆以及这n个石子堆中石子数目,每次操作合并两个相邻的石子堆,代价为两个石子堆数目之和,求最后合成一个石子堆时所花费的最小代价。
解题思路:典型的区间dp
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define mem(a, b) memset(a, b, sizeof(a))
const int MAXN = ;
const int inf = 0x3f3f3f3f;
using namespace std; int arr[MAXN], sum[MAXN];
int dp[MAXN][MAXN]; //表示i ~ j区间内的最小代价 int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
mem(dp, ), mem(sum, );
for(int i = ; i <= n; i ++)
{
scanf("%d", &arr[i]);
sum[i] += sum[i - ] + arr[i];
}
for(int len = ; len <= n; len ++) //枚举长度
{
for(int i = ; i + len - <= n; i ++) // 枚举区间起点
{
int j = i + len - ; //区间终点
dp[i][j] = inf;
for(int k = i; k < j; k ++)
{
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + ][j] + sum[j] - sum[i - ]);
}
}
}
printf("%d\n", dp[][n]);
}
return ;
}
题目链接:https://ac.nowcoder.com/acm/contest/1089/J
题目大意:给出一个环形项链,每次操作合成两个相邻的宝珠,代价为两个宝珠首,中间,尾乘积,求最后合成一个宝珠时所花费的最小代价。
解题思路:
1.区间dp,破环成链,数组开2倍。
#include<stdio.h>
#define LL long long
#include<math.h>
#include<algorithm>
using namespace std;
const int MAXN = ; int a[MAXN];
LL dp[MAXN][MAXN]; int main()
{
int n;
scanf("%d", &n);
for(int i = ; i <= n; i ++)
{
scanf("%d", &a[i]);
a[i + n] = a[i];
}
for(int len = ; len <= n; len ++) //枚举长度
{
for(int i = ; i + len - <= * n; i ++) //枚举起点
{
int j = i + len - ; //终点
for(int k = i; k < j; k ++)
{
dp[i][j] = max(dp[i][j], dp[i][k] + dp[k + ][j] + a[i] * a[k + ] * a[j + ]);
}
}
}
LL ans = -;
for(int i = ; i <= n; i ++)
ans = max(ans, dp[i][i + n - ]);
printf("%lld\n", ans);
return ;
}
石子合并/能量项链【区间dp】的更多相关文章
- 1154 能量项链[区间dp]
1154 能量项链 2006年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 在Ma ...
- P1063 能量项链 区间dp
题目描述 在MarsMars星球上,每个MarsMars人都随身佩带着一串能量项链.在项链上有NN颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一 ...
- tyvj 1056 能量项链 区间dp (很神)
P1056 能量项链 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2006 提高组 第一道 描述 在Mars星球上,每个Mars人都随身佩 ...
- 洛谷P1063能量项链(区间dp)
题目描述: 给定一串序列x[],其中的每一个Xi看作看作一颗珠子,每个珠子包含两个参数,head和tail,前一颗的tail值是后一个的head值,珠子呈现环形(是一条项链),所以最后一颗的tail是 ...
- 能量项链(区间DP入门)
题面:能量项链https://www.luogu.com.cn/problem/P1063 乍一看和石子合并差不多,可是多了头值和尾值,看起来十分麻烦 我们画一张图,紫色表示头值,蓝色表示尾值.规定西 ...
- tyvj 1056 能量项链 区间dp
P1056 能量项链 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2006 提高组 第一道 描述 在Mars星球上,每个Mars人都随身佩 ...
- 能量项链//区间DP
P1056 能量项链 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2006 提高组 第一道 描述 在Mars星球上,每个Mars人都随身佩 ...
- P1880 [NOI1995]石子合并-(环形区间dp)
https://www.luogu.org/problemnew/show/P1880 解题过程:本次的题目把石子围成一个环,与排成一列的版本有些不一样,可以在后面数组后面再接上n个元素,表示连续n个 ...
- NYOJ737石子合并(二)-(区间dp)
题目描述: 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆.求出 ...
随机推荐
- Axios的params与data的
Axios发送请求时params和data的区别 https://www.cnblogs.com/cwzqianduan/p/8675356.html(copy 在使用axios时,注意到配置选项中 ...
- C++基础--if/else和switch/case的区别
if和switch的区别: 一.语句的格式: if/else的写法格式如下: int nA, nB; scanf_s("%d", &nA); //输入整数并赋值给变量a s ...
- Gradle 如何打包 Spring Boot 可执行 JAR
如何在 Gradle 中配置一个项目可以打包为 Spring Boot 可执行 Jar? 你首先需要添加到 org.springframework.boot 到插件中: 例如下面的代码: plugin ...
- devstack cinder-volume服务状态为down
cinder-manage service list 查看到有一个 xxx状态 Binary Host Zone Status State Updated At RPC Version Object ...
- Linux之防火墙【CentOS 7】
CentOS 7默认使用的是firewall作为防火墙,这里改为iptables防火墙. firewall操作: # service firewalld status; #查看防火墙状态 (disab ...
- Python学习日记(七)——装饰器
1.必备知识 #### 一 #### def foo(): print 'foo' foo #表示是函数 foo() #表示执行foo函数 #### 二 #### def foo(): print ' ...
- debian、ubuntu安装metasploit通用方法
网上有很多方法让去github上下载安装,这方法的确可以但是特别慢,更新也特别慢,这里写下比较快的方法 1.添加kali源 vim /etc/apt/sources.list 在原有源的基础上添加国内 ...
- 组件基础之动态tab组件
<template> <div id="demo31"> <p>-----------------组件基础之动态tab组件一---------- ...
- kotlin之函数的基本用法
fun main(arg: Array<String>) { val )//调用函数 print(double) } fun double(x:Int):Int{ *x } kotlin函 ...
- c++ string操作
#include <iostream>#include <string> using namespace std; int main(){ string str1(" ...