题目大意:

输入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. Executor ExecutorService Executors

    Executor public interface Executor { void execute(Runnable command); } ExecutorService ExecutorServi ...

  2. delphi 安卓开发常用

    delphi 安卓开发有几个常用的pas: FMX.Helpers.Android, Androidapi.JNI.Net, Androidapi.JNI.GraphicsContentViewTex ...

  3. NX二次开发-UFUN拾取向量对话框UF_UI_specify_vector

    #include <uf.h> #include <uf_ui.h> UF_initialize(); //拾取向量对话框 ], pnt[]; int mode = UF_UI ...

  4. mysql函数操作-增加自定义函数

    #首先执行看mysql是否开启函数SHOW VARIABLES LIKE '%func%';------------------------------------------------------ ...

  5. [JZOJ 5810] 简单的玄学

    思路: 就是考虑一个结论 对于\(1<=x<=2^n\),那么\(x\)与\(2^n - x\)中的2的个数相等. 证明: 我们将\(x\)表示成\(2^k*b\),那么\(2^n - x ...

  6. (转)基于SAML的单点登录介绍

    转:http://www.cnblogs.com/zsuxiong/archive/2011/11/19/2255497.html 一.背景知识: SAML即安全断言标记语言,英文全称是Securit ...

  7. tomcat部署项目报错NoSuchMethodException#addServlet,addFilter

    java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet java.lang.NoSuchMethod ...

  8. python 16 文件操作(二)

    转自 http://www.cnblogs.com/BeginMan/p/3169020.html 一.文件系统 从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件存储并对存入的文件进 ...

  9. 在CentOS6上安装mysql5.7报错

    报错截图: 处理方法: # yum install numactl perl -y

  10. Eclipse中普通java项目转成Web项目

    在eclipse导入一个myeclipse建的web项目后,在Eclipse中显示的还是java项目,按下面的步骤可以将其转换成web项目. 1.找到项目目录下的.project文件 2.编辑.pro ...