Mid-Atlantic 2008 Lawrence of Arabia /// 区间DP oj21080
题目大意:
输入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
4 1
4 5 1 2
4 2
4 5 1 2
0 0
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的更多相关文章
- 【BZOJ-1068】压缩 区间DP
1068: [SCOI2007]压缩 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1001 Solved: 615[Submit][Status][ ...
- HDU 5115 Dire Wolf 区间dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...
- HDU 4632 Palindrome subsequence (区间DP)
题意 给定一个字符串,问有多少个回文子串(两个子串可以一样). 思路 注意到任意一个回文子序列收尾两个字符一定是相同的,于是可以区间dp,用dp[i][j]表示原字符串中[i,j]位置中出现的回文子序 ...
- 【BZOJ】1044: [HAOI2008]木棍分割 二分+区间DP
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1044 Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, ...
- hdu 2829 Lawrence(四边形不等式优化dp)
T. E. Lawrence was a controversial figure during World War I. He was a British officer who served in ...
- BZOJ.3928.[CERC2014]Outer space invaders(区间DP)
BZOJ3928 双倍经验BZOJ4048 Codeforces GYM100543 L \(Description\) \(Solution\) 考虑出现时间在\([l,r]\)内的敌人,设最远的敌 ...
- POJ 1179 - Polygon - [区间DP]
题目链接:http://poj.org/problem?id=1179 Time Limit: 1000MS Memory Limit: 10000K Description Polygon is a ...
- 2018.10.23 hdu2476String painter(区间dp)
传送门 一道挺妙的区间dp. 我们先用区间dp求出第一个串为空串时的最小代价. 然后再加入原本的字符更新答案就行了. 代码: #include<bits/stdc++.h> using n ...
- 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时的最大贡献. 然后可以枚举端点转移. 当时口胡到这儿就不会了. ...
随机推荐
- Go Hello World 实例
## Go Hello World 实例 package main import "fmt" func main() { /* This is my first sample pr ...
- C++11中的技术剖析(萃取技术)
从C++98开始萃取在泛型编程中用的特别多,最经典的莫过于STL.STL中的拷贝首先通过萃取技术识别是否是已知并且支持memcpy类型,如果是则直接通过内存拷贝提高效率,否则就通过类的重载=运算符,相 ...
- C++——函数模板和类模板
声明: //template 关键字告诉C++编译器 我要开始泛型了.你不要随便报错 //数据类型T 参数化数据类型 template <typename T> void myswap(T ...
- Intergalactic Map SPOJ - IM
传送门 我觉得我写得已经和题解一模一样了,不知道为什么就是过不了..懒得拍了,反正不是很难,不太想浪费时间. 1~2~3的一条路径相当于从2~1的一条路径+2~3的一条路径,点不能重复经过,于是拆点. ...
- (转) MySQL中索引的限制
转:http://book.51cto.com/art/200906/132459.htm 8.4.8 MySQL中索引的限制 在使用索引的同时,还应该了解MySQL 中索引存在的限制,以便在索引应 ...
- TCP之1460MSS和1448负载
TCP和1448 1448字节是实际场景下,单个TCP包的实际运载能力.也就是说,实际场景下,上层调用send(1000KB),下层会把这1000KB封装成多个TCP包进行发送.单个TCP包每次打包1 ...
- spring-boot-configuration-processor
spring默认使用yml中的配置,但有时候要用传统的xml或properties配置,就需要使用spring-boot-configuration-processor了 引入pom依赖 <de ...
- Codeforces 1166A - Silent Classroom
题目链接:http://codeforces.com/problemset/problem/1166/A 思路:统计所有首字母出现的次数,由贪心可知对半分最少. AC代码: #include<i ...
- java调用scala 查询hbase数据
问题:将scala打成jar包,提供给java调用,但是java一直提示找不到类 实现功能:利用spark查询hbase数据,然后提供给外部接口调用 我的方式:spark查询Hbase用scala实现 ...
- element-ui表格合计不显示&被遮挡问题
step1:修改全局样式 .el-table{ overflow:visible !important; } .el-card__body { padding: 20px 20px 50px 20px ...