luogu P1880 石子合并
2024-09-28 21:20:58
题目描述
在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。
试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分.
输入输出格式
输入格式:
数据的第1行试正整数N,1≤N≤100,表示有N堆石子.第2行有N个数,分别表示每堆石子的个数.
输出格式:
输出共2行,第1行为最小得分,第2行为最大得分.
输入输出样例
输入样例#1:
4
4 5 9 4
输出样例#1:
43
54
区间动态规划
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
inline int min(int x,int y)
{
if(x<y)return x;return y;
}
inline int max(int x,int y)
{
if(y>x)return y;return x;
}
int a[];
int dp_max[][];
int dp_min[][];
int main()
{
int n;
scanf("%d",&n);
memset(dp_max,,sizeof(dp_max));
for(int i=;i<=*n;i++)
for(int j=i+;j<=*n;j++)
dp_min[i][j]=0x7fffffff;
for(int i=;i<=n;i++)scanf("%d",a+i),a[i+n]=a[i];
for(int i=;i<=n*;i++)a[i]+=a[i-];
for(int i=n*-;i>=;i--)
{
for(int j=i+;j<=n*;j++)
{
for(int k=i;k<j;k++)
{
dp_min[i][j]=min(dp_min[i][j],dp_min[i][k]+dp_min[k+][j]+a[j]-a[i-]);
dp_max[i][j]=max(dp_max[i][j],dp_max[i][k]+dp_max[k+][j]+a[j]-a[i-]);
}
}
}
int minn=0x7fffffff;
int maxx=-;
for(int i=;i<=n;++i)
{
minn=min(dp_min[i][i+n-],minn);
maxx=max(dp_max[i][i+n-],maxx);
}
printf("%d\n%d",minn,maxx);
return ;
}
最新文章
- asp.net读取模版并写入文本文件
- APP逆向常识
- 判断用户输入的银行卡号是否正确--基于Luhn算法的格式校验
- Core Java Volume I — 4.10. Class Design Hints
- android 数据存储的四种方式.
- Self-numbers 2 - SGU 108
- Java学习日记-3 Character和字符串
- nginx源码分析——configure脚本
- JPush简单Java服务端案例实现
- arcgis api for flex 除去 esri map控件中的logo标志
- Bean的自动装配
- delphi 子窗体只能最小化不能关闭的解决方案
- kafaka quickstart
- 【翻译】Context should go away for Go 2
- Android中控制Dialog呈现的时间
- const引用返回值
- tp5月统计的bug
- Springboot集成SpringData JPA
- vc 获得调用者的模块名称
- img = img1*mask + img2*(1-mask) How do that ?
热门文章
- COGS:313. [POI2001] 和平委员会
- 洛谷P1553数字反转升级版
- Excel动画教程50例(二)
- python(或BAT脚本)自动执行adb&#160;shell以后的命令
- apizza导出为html后,从中提取api_name/api_path/api_method,保存到本地,方便根据接口名称得到接口路径与请求方法
- git:多个sshkey配置
- c++ primer plus 第6版 部分三 9章 - 章
- Leetcode 532.数组中的K-diff数对
- 集训队日常训练20181117 DIV2
- [错误解决]ubuntu 不在 sudoers 文件中。此事将被报告。