题目大意:

输入n,m

输入n个数

将n个数切割m次分为m+1段,使得各段的Strategic Value总和最小

一组数a b c d的SV值为 a*b + a*c + a*d + b*c + b*d + c*d

即 a*( b+c+d ) + b*( c+d ) + c*d

Sample Input

4 1
4 5 1 2
4 2
4 5 1 2
0 0

Sample Output

17
2

首先将 原数组a[] 处理出后缀和 s[]

计算出n个数中任意两点之间的SV值 sum[ i ][ j ]

1.任意点到最后一点的SV值 sum[ i ][ n ] = sum[ i+1 ][ n ] + a[ i ] * s[ i+1 ]

如 2 3 4,sum(2到n)=sum(3到n)+2*(3+4)

2.其他情况 sum[ i ][ j ] = sum[ i ][ j+1 ] - (s[ i ]-s[ j+1 ])* a[ j+1]

如 2 3 4 5 6,sum(2到4)=sum(2到5)-(2+3+4)*5

得到任意两点间的SV值后 按区间dp的方法

i 为末尾位置,j 为切割次数,k 为切割点

则 dp[ i ][ j ] = min( dp[ i ][ j ] , dp[ k ][ j-1 ]+sum[ k+1 ][ i ] )

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
int n,m,a[],s[];
int sum[][],dp[][];
int main()
{
while(~scanf("%d%d",&n,&m)) {
if(n+m==) break;
a[n]=s[n]=;
for(int i=;i<n;i++) scanf("%d",&a[i]);
for(int i=n-;i>=;i--) s[i]=a[i]+s[i+]; memset(sum,,sizeof(sum));
for(int i=n-;i>=;i--)
sum[i][n-]=sum[i+][n-]+a[i]*s[i+];
for(int i=n-;i>=;i--)
for(int j=i-;j>=;j--)
sum[j][i]=sum[j][i+]-((s[j]-s[i+])*a[i+]); memset(dp,INF,sizeof(dp));
for(int i=;i<n;i++) dp[i][]=sum[][i];
for(int i=;i<=m;i++)
for(int j=i;j<n;j++)
for(int k=i-;k<j;k++)
dp[j][i]=min(dp[j][i],dp[k][i-]+sum[k+][j]);
printf("%d\n",dp[n-][m]);
} return ;
}

Mid-Atlantic 2008 Lawrence of Arabia /// 区间DP oj21080的更多相关文章

  1. 【BZOJ-1068】压缩 区间DP

    1068: [SCOI2007]压缩 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1001  Solved: 615[Submit][Status][ ...

  2. HDU 5115 Dire Wolf 区间dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...

  3. HDU 4632 Palindrome subsequence (区间DP)

    题意 给定一个字符串,问有多少个回文子串(两个子串可以一样). 思路 注意到任意一个回文子序列收尾两个字符一定是相同的,于是可以区间dp,用dp[i][j]表示原字符串中[i,j]位置中出现的回文子序 ...

  4. 【BZOJ】1044: [HAOI2008]木棍分割 二分+区间DP

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1044 Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, ...

  5. hdu 2829 Lawrence(四边形不等式优化dp)

    T. E. Lawrence was a controversial figure during World War I. He was a British officer who served in ...

  6. BZOJ.3928.[CERC2014]Outer space invaders(区间DP)

    BZOJ3928 双倍经验BZOJ4048 Codeforces GYM100543 L \(Description\) \(Solution\) 考虑出现时间在\([l,r]\)内的敌人,设最远的敌 ...

  7. POJ 1179 - Polygon - [区间DP]

    题目链接:http://poj.org/problem?id=1179 Time Limit: 1000MS Memory Limit: 10000K Description Polygon is a ...

  8. 2018.10.23 hdu2476String painter(区间dp)

    传送门 一道挺妙的区间dp. 我们先用区间dp求出第一个串为空串时的最小代价. 然后再加入原本的字符更新答案就行了. 代码: #include<bits/stdc++.h> using n ...

  9. 2018.10.22 bzoj4380: [POI2015]Myjnie(区间dp)

    传送门 区间dp好题. f[i][j][k]f[i][j][k]f[i][j][k]表示区间[i,j][i,j][i,j]最小值为kkk时的最大贡献. 然后可以枚举端点转移. 当时口胡到这儿就不会了. ...

随机推荐

  1. 【安装】Mac rabbitMQ

    安装 brew install rabbitmq 目录  cd /usr/local/Cellar/rabbitmq/3.7.4/sbin 插件 sudo ./rabbitmq-plugins ena ...

  2. 优化剪枝搜索——牛客多校第二场F

    试了很多种爆搜和剪枝,最后发现还是状压的比较好用 #include <bits/stdc++.h> using namespace std; // #define IO #define f ...

  3. 20140331 HOG代码调试 Boost库安装

    1.CUDAHOG代码调试 错误1: 错误提示:(main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall cudaHOG::cudaH ...

  4. Firefox Developer Edition 是专为开发者设计

    Firefox Developer Edition 当前是基于 Firefox 35.0a2,这款全新的浏览器包括内建调试功能,集成类似于Firefox火狐工具适配器的专用工具,并在浏览器当中内建We ...

  5. 干货:Java技术栈18年02月精彩好文汇总

    一晃眼,一个月过去了,新年也过完了. 一晃眼,又老了一岁了,感觉新的一年压力更大了. 我们也该为这一个月的技术做做汇总了,错过的同学正好可以统一回顾看看,已经看过的同学也可以再温习一下.. Java技 ...

  6. 使Excel中单元格内英文为Arial Narrow 中文为宋体显示打印

    因为在对数据表进行排版格式整理的时候,发现Arial Narrow字体是不支持中文的,所以中文默认为宋体,但是显示出来却不是宋体,需要双击单元格中文才显示为宋体,这样打印出来才为宋体 但是如果有很多单 ...

  7. .NET Core 3.0之深入源码理解Startup的注册及运行

    原文:.NET Core 3.0之深入源码理解Startup的注册及运行   写在前面 开发.NET Core应用,直接映入眼帘的就是Startup类和Program类,它们是.NET Core应用程 ...

  8. 【转载】C# 开源库大全非常好

    原文地址:http://m.blog.csdn.net/woddle/article/details/37311877 C#开源大全 商业协作和项目管理平台-TeamLab 网络视频会议软件-VMuk ...

  9. mysql查询小技巧

    如果所传bookTypeName为空则执行select * from t_bookType(搜索框里未输入信息) 否则追加 and bookTypeName like  '%"+bookTy ...

  10. latex 引用文献 bib

    study from : https://jingyan.baidu.com/article/925f8cb8bce1f0c0dce0564f.html 寻找文献 谷歌学术 from: https:/ ...