题意:

给你一串数字,头尾不能动,每次取出一个数字,这个数字贡献=该数字与左右相邻数字的乘积,求一个最小值。

思路:

用dp[s][t]去代表s到t的最小值,包括a[s]和a[t],然后从区间为3开始枚举,对每个小区间枚举一个取出的数,状态转移方程就是:dp[s][t]=min(dp[s][k]+dp[k][j]+a[i]*a[k]*a[j];

PS:

操蛋的区间DP…想了半个小时毛都没想出来。看了自己的思路,是没有去重视这个取的问题,状态的改变就是取的之后,应该从这里一直去思考,对于子结构的观念也不强,怎么说啊,子结构就是一个前一状态,其实就是对于dp[i][j]数组的定义感不强,所以对于转化也不可能有多大的进展。说了那么多,解题最应该的就是这个对于某个位置的取一直要去思考,然后就会想到枚举每个位置了。卧槽,好弱啊,就是这么弱啊,其实没听到区间DP,也会写啊,也不知道为毛这都想不到,看重DP了吧,,,不知道怎么说了,妈的。

贴一发大哥给我的**挫**code…

#include <stdio.h>
#include <limits.h>
#include <string.h>
#define min(a, b) a < b ? a : b int a[200];
int dp[200][200]; int main()
{
int n;
scanf("%d", &n);
for(int i = 1;i <= n;++i)
scanf("%d", &a[i]);
memset(dp, 0, sizeof(dp));
for(int l = 3;l <= n;++l) //区间长度
{
for(int s = 1;s <= n - l + 1;++s) //区间开头
{
int e = s + l - 1; //长度为l的[s, e]这个区间
dp[s][e] = INT_MAX;
for(int k = s + 1;k <= e - 1;++k) //最后一次取哪个
{
dp[s][e] = min(dp[s][e],dp[s][k] + dp[k][e] + a[s] * a[k] * a[e]);
}
}
}
printf("%d\n", dp[1][n]);
return 0;
}

poj1651【区间DP·基础】的更多相关文章

  1. poj 2955 Brackets (区间dp基础题)

    We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a ...

  2. poj1651 区间dp

    //Accepted 200 KB 0 ms //dp区间 //dp[i][j]=min(dp[i][k]+dp[k][j]+a[i]*a[k]*a[j]) i<k<j #include ...

  3. cf1114D 区间dp基础

    最简单的那类区间dp,昨天晚上心态不对,不知道在打什么.. /* dp[l][r]表示区间[l,r]都涂成同色的代价 dp[l][r]可以由dp[l][r-1],dp[l+1][r],dp[l+1][ ...

  4. hdoj5115【区间DP·基础】

    题意: 有n头wolf排成一排,杀一头wolf回受到受到的伤害=它的本身a[i]+相邻两个b[i-1]+b[i+1].然后杀死第k个位置的wolf的话,k-1和k+1默认相邻(满足的话). 思路: 用 ...

  5. hdu 2089 不要62 (数位dp基础题)

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. poj1651(区间dp)

    题目连接:http://poj.org/problem?id=1651 题意:给出一组N个数,每次从中抽出一个数(第一和最后一个不能抽),该次的得分即为抽出的数与相邻两个数的乘积.直到只剩下首尾两个数 ...

  7. 【基础练习】【区间DP】codevs1090 加分二叉树题解

    2003 NOIP TG 题目描写叙述 Description 设一个n个节点的二叉树tree的中序遍历为(l,2,3,-,n),当中数字1,2,3,-,n为节点编号.每一个节点都有一个分数(均为正整 ...

  8. CodeForces-607B:Zuma (基础区间DP)

    Genos recently installed the game Zuma on his phone. In Zuma there exists a line of n gemstones, the ...

  9. 区间dp总结篇

    前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增.公共子序列写了个总结.反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报 ...

随机推荐

  1. [Unit Testing] Fundamentals of Testing in Javascript

    In this lesson, we’ll get the most fundamental understanding of what an automated test is in JavaScr ...

  2. 高仿微信实现左滑显示删除button功能

    在实际项目中删除列表中的某一项是很常见的功能.传统的做法能够使用长按监听器等,而如今流行的做法是左滑弹出删除button,微信,QQ等都是这么做的,以下做一个演示样例,代码例如以下: 主页面MainA ...

  3. Solidworks 不能生成实体,因为这将导致厚度为零的零件怎么办

    如下图所示,我认为我长出一块东西根本不会对其他零件有什么影响.   去掉合并结果之后就好了.   钣金要比方钢高出1mm,这样焊接上去才方便.              

  4. 关于android 使用bitmap的OOM心得和解决方式

    android开发,从2010年開始学习到如今的独立完毕一个app,这漫长的四年,已经经历了非常多次bug的折磨.无数次的加班训练.然而,自以为自己已经比較了解android了,却近期在一个项目上.由 ...

  5. log开启与屏蔽的一种调式方式

    #ifndef _LOGGING_H #define _LOGGING_H #define deg printf #ifdef ENABLE_TRACING #define ENTER() do { ...

  6. HDU 1032.The 3n + 1 problem【注意细节】【预计数据不强】【8月21】

    The 3n + 1 problem Problem Description Problems in Computer Science are often classified as belongin ...

  7. Linux fork函数具体图解-同一时候分析一道腾讯笔试题

    原创blog.转载请注明出处 头文件: #include<unistd.h> #include<sys/types.h> 函数原型: pid_t fork( void); (p ...

  8. kbmMW 5.0.1发布了(跨全平台,包括Linux,可使用Win的高性能HTTPSys传输层,等等)

    kbmMW5如期发布,作者增加了很多重磅功能,以下翻译作者的发布文件:1.支持Delphi 10.2 Tokyo,包括Linux支持(测试版)2.大量的新功能与改进3.新的智能服务(Smart ser ...

  9. SDUT OJ 图练习-BFS-从起点到目标点的最短步数 (vector二维数组模拟邻接表+bfs , *【模板】 )

    图练习-BFS-从起点到目标点的最短步数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 在古老的魔兽传说中,有两个军团,一个叫天 ...

  10. sql 简单查询修改

    .group by order by from webdb where gathtrime between '2017-06-14 00:00:00' and '2017-06-14 23:59:59 ...