zzuli-1739: DP(区间dp)

http://acm.zzuli.edu.cn/problem.php?id=1739

自家学校OJ上的题。

一个区间dp和我上一篇博文写的区间dp基本上一样,

直接上状态转移方程dp[i][j]=min(dp[i][k]+dp[k][j]+a[i]*a[k]*a[j],dp[i][j]);

思路和上一篇基本一样,状态方程表达的意思也一样,具体参考上一篇。比较懒,不写了。。。。

 1 #include<stdio.h>
 2 #include<string.h>
 3 const int N=1e7;
 4 typedef long long ll;
 5 int main(void)
 6 {
 7     int i,j,k,p,q,l;
 8     int a[105];
 9     int dp[110][110];
10     while(scanf("%d",&k)!=EOF)
11     {
12         for(i=1; i<=k; i++)
13         {
14             scanf("%d",&a[i]);
15         }
16         memset(dp,0,sizeof(dp));
17         for(i=3; i<=k; i++)
18         {
19             for(j=i-2; j>=1; j--)
20             {
21                 dp[i][j]=dp[i][i-1]+dp[i-1][j]+a[i]*a[i-1]*a[j];
22                 for(l=i-1; l>j; l--)
23                 {
24                     dp[i][j]=dp[i][j]<dp[i][l]+dp[l][j]+a[i]*a[l]*a[j]?dp[i][j]:dp[i][l]+dp[l][j]+a[i]*a[l]*a[j];
25
26                 }
27             }
28         }
29         printf("%d\n",dp[k][1]);//因为两端不取,所以最后端点就是k和1;
30     }
31 return 0;
32
33
34 }
时间: 2024-10-22 03:05:13

zzuli-1739: DP(区间dp)的相关文章

POJ #3267 The Cow Lexicon 型如&quot; E[j] = opt{D+w(i,j)} &quot;的简单DP 区间DP

Description 问题的描述以及输入输出的样例可以看这里:链接 思路 虽然 DISCUSS 中总有人说水题,但是我觉得这道题的质量可以 (或许我比较弱ORZ ,在做过的 DP 题里算 medium 难度. 题目的意思是给你一个主串和一堆子串,需要你将子串和主串完全匹配上,在匹配过程中可以删除主串中匹配不上的字符,最后统计出被删除的最少字符数目. 比如主串是 carmsr ,子串有 car .mr 两种.可以只用 car 去匹配,那么匹配不上的字符有 m.s.r 三个,所以需要删除三个字符:

URAL 1776 Anniversary Firework 概率dp+区间dp

A - Anniversary Firework Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice URAL 1776 Appoint description:  System Crawler  (2016-05-06) Description Denis has to prepare the Ural State University 90th

Treats for the Cows POJ - 3186 dp 区间dp

//dp[i][j]表示第i次从左边取,第j次从右边取的价值,所以我们可以得到状态方程 //dp[i][j]=max(dp[i-1][j]+(i+j)*a[i],dp[i][j-1]+(i+j)*a[n-j+1]) (i > 0 && j > 0 ) //dp[i][0]=dp[i-1][0]+i*a[i],dp[0][i] dp[0][i-1]+i*a[n-i+1]; #include<cstdio> #include<cmath> #include&

POJ 1141 Brackets Sequence (区间DP)

Description Let us define a regular brackets sequence in the following way: 1. Empty sequence is a regular sequence. 2. If S is a regular sequence, then (S) and [S] are both regular sequences. 3. If A and B are regular sequences, then AB is a regular

CSUOJ-1980 不堪重负的数(区间dp)

1980: 不堪重负的树 Submit Page   Summary   Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 57     Solved: 20 Description 小X非常喜欢树,然后他生成了一个大森林给自己玩.玩着玩着,小X陷入了沉思. 一棵树由N个节点组成,编号为i的节点有一个价值Wi. 假设从树根出发前往第i个节点(可能是树根自己),一共需要经过Di个节点(包括起点和终点),那么这个节点对这棵树产生的负担

【日常学习】【区间DP】codevs1048 石子归并题解

题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使得总合并代价达到最小. 输入描述 Input Description 第一行一个整数n(n<=100) 第二行n个整数w1,w2...wn  (wi <= 100) 输出描述 Output Description 一个整数表示最小合并代价 样例输入 Sample Input 4 4 1 1 4 样

uva 10003 Cutting Sticks 简单区间dp

// uva 10003 Cutting Sticks 区间dp // 经典的区间dp // dp(i,j)表示切割小木棍i-j所需要的最小花费 // 则状态转移为dp(i,j) = min{dp(i,k) + dp(k,j) + a[j]-a[i]) // 其中k>i && k<j // a[j] - a[i] 为第一刀切割的代价 // a[0] = 0,a[n+1] = L; // dp数组初始化的时候dp[i][i+1]的值为 0,这表示 // 每一段都已经是切割了的,不

黑书例题 Fight Club 区间DP

题目可以在bnuoj.soj等OJ上找到. 题意: 不超过40个人站成一圈,只能和两边的人对战.给出任意两人对战的输赢,对于每一个人,输出是否可能是最后的胜者. 分析: 首先序列扩展成2倍,破环成链. dp[i][j]表示i和j能够相遇对打,那么dp[i][i+n]为真代表可以成为最后胜者. 枚举中间的k,若i和j都能和k相遇,且i和j至少一人能打赢k,那么i和j可以相遇. 复杂度o(n^3) 1 #include<cstdio> 2 #include<cstring> 3 usi

算法复习——区间dp

感觉对区间dp也不好说些什么直接照搬讲义了2333 例题: 1.引水入城(洛谷1514) 这道题先开始看不出来到底和区间dp有什么卵关系···· 首先肯定是bfs暴力判一判可以覆盖到哪些城市····无解直接输出···有解得话就要想想了···· 这道题关键是要发现··如果一个蓄水池所在城市可以覆盖到一些沙漠城市···那么这些沙漠城市肯定是一段····不然假设有一个城市是断开的而两边都被同一个蓄水池流出的水覆盖,这个城市四周的城市都肯定比它矮···(不理解举个反例吧···反正我举不出来)···然后就