题目链接

题意:环形的一群石子,每次可以选择相邻的两堆合并,分数为新得到的一堆石子,求将这片石子合并成一堆的最大和最小分数

输入:第一行一个正整数n,其后n个数代表每堆石子的个数

分析:第一次写的时候我想当然的写的状态转移方程是dpx[l][r]=max(dpx[l+1][r]+a[l][r],dpx[l][r-1]+a[l][r]);(dpx是指这个dp数组用来求最大分数),想的是左右逼近,但是我这个状态转移方程有个非常致命的缺点,那就是合并的两堆石头,一定有一堆是没经过合并的,这很明显无法代表全部情况,万一正解就是左边一半合并成一起,右边一半合并成一起,然后左右合并,我的算法就肯定得不到答案。

搜了搜正解,正解状态转移方程是dp1[l][r]=max(dp1[l][r],dp1[l][k]+dp1[k+1][r]+d(l,r));通过枚举一个k来实现将左右两堆合并在一起的情况

然后再注意题目中的石子是成环的,所以需要用2n的数组来存储,最后遍历也是同样。

另外dp[i][i]这种单一数组的分数是0,所以dp2数组决不能一开始fill成inf,只能在一个具体的定义下设为inf,具体看代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=<<;
const int maxn=;
const double pi=acos(-);
const int mod=1e9+;
int a[maxn],sum[maxn];
int dp1[maxn][maxn],dp2[maxn][maxn];
int d(int x,int y){
return sum[y]-sum[x-];
}
int main(){
int n;scanf("%d",&n);
//fill((int *)dp2,(int *)dp2+maxn*maxn,inf);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
a[i+n]=a[i];
sum[i]=sum[i-]+a[i];
}
for(int i=n+;i<=*n;i++){
sum[i]=sum[i-]+a[i];
}
for(int len=;len<=n;len++){
for(int l=;(l+len-)<=*n;l++){
int r=l+len-;
dp2[l][r]=inf;
for(int k=l;k<r;k++){//注意k是比r小的,因为是左边是l到k,右边是k+1-r
dp1[l][r]=max(dp1[l][r],dp1[l][k]+dp1[k+][r]+d(l,r));
dp2[l][r]=min(dp2[l][r],dp2[l][k]+dp2[k+][r]+d(l,r));
}
}
}
int mx=,mn=inf;
for(int i=;i<=n;i++){
mx=max(mx,dp1[i][i+n-]);
mn=min(mn,dp2[i][i+n-]);
}
cout<<mn<<endl<<mx<<endl;
return ;
}

最新文章

  1. C#上位机制作之串口接受数据(利用接受事件)
  2. offset图
  3. UNIX:高级环境编程 - 第十五章 IPC:进程间通信
  4. 对于Kindle的分析
  5. HTML5头部标签备忘
  6. sqlmap查找SQL注入漏洞入门
  7. 使用python检测一个设备是否ping的通
  8. hdu 2048 神、上帝以及老天爷(错排)
  9. css 设置样式
  10. 泡泡堂、QQ堂游戏通信架构分析
  11. OpenSSH 高级运用两则
  12. Delphi 记事本 TMemo
  13. C#的内存管理原理解析+标准Dispose模式的实现
  14. vue vuex的用法
  15. L2-007 家庭房产 (25 分) (并查集)
  16. 题解-COCI-2015Norma
  17. debug apk logCat
  18. Android JAR包、Library项目
  19. shell定时任务crontab
  20. gulp css 压缩 合并

热门文章

  1. Unity XLua之协程
  2. c#之AES加密解密
  3. Python练习:爬取图片
  4. js闭包讲解
  5. 使用Redux DevTools浏览器插件调试redux
  6. 2018-2019-2 网络对抗技术 20165316 Exp5 MSF基础应用
  7. mysql恢复备份数据时,部分表数据丢失的问题
  8. 解析url成对象形式
  9. springboot整合JPA(简单整理,待续---)
  10. k8s基本对象及架构