poj1651【区间DP·基础】
题意:
给你一串数字,头尾不能动,每次取出一个数字,这个数字贡献=该数字与左右相邻数字的乘积,求一个最小值。
思路:
用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·基础】的更多相关文章
- poj 2955 Brackets (区间dp基础题)
We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a ...
- 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 ...
- cf1114D 区间dp基础
最简单的那类区间dp,昨天晚上心态不对,不知道在打什么.. /* dp[l][r]表示区间[l,r]都涂成同色的代价 dp[l][r]可以由dp[l][r-1],dp[l+1][r],dp[l+1][ ...
- hdoj5115【区间DP·基础】
题意: 有n头wolf排成一排,杀一头wolf回受到受到的伤害=它的本身a[i]+相邻两个b[i-1]+b[i+1].然后杀死第k个位置的wolf的话,k-1和k+1默认相邻(满足的话). 思路: 用 ...
- hdu 2089 不要62 (数位dp基础题)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- poj1651(区间dp)
题目连接:http://poj.org/problem?id=1651 题意:给出一组N个数,每次从中抽出一个数(第一和最后一个不能抽),该次的得分即为抽出的数与相邻两个数的乘积.直到只剩下首尾两个数 ...
- 【基础练习】【区间DP】codevs1090 加分二叉树题解
2003 NOIP TG 题目描写叙述 Description 设一个n个节点的二叉树tree的中序遍历为(l,2,3,-,n),当中数字1,2,3,-,n为节点编号.每一个节点都有一个分数(均为正整 ...
- CodeForces-607B:Zuma (基础区间DP)
Genos recently installed the game Zuma on his phone. In Zuma there exists a line of n gemstones, the ...
- 区间dp总结篇
前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增.公共子序列写了个总结.反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报 ...
随机推荐
- [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 ...
- 高仿微信实现左滑显示删除button功能
在实际项目中删除列表中的某一项是很常见的功能.传统的做法能够使用长按监听器等,而如今流行的做法是左滑弹出删除button,微信,QQ等都是这么做的,以下做一个演示样例,代码例如以下: 主页面MainA ...
- Solidworks 不能生成实体,因为这将导致厚度为零的零件怎么办
如下图所示,我认为我长出一块东西根本不会对其他零件有什么影响. 去掉合并结果之后就好了. 钣金要比方钢高出1mm,这样焊接上去才方便.
- 关于android 使用bitmap的OOM心得和解决方式
android开发,从2010年開始学习到如今的独立完毕一个app,这漫长的四年,已经经历了非常多次bug的折磨.无数次的加班训练.然而,自以为自己已经比較了解android了,却近期在一个项目上.由 ...
- log开启与屏蔽的一种调式方式
#ifndef _LOGGING_H #define _LOGGING_H #define deg printf #ifdef ENABLE_TRACING #define ENTER() do { ...
- HDU 1032.The 3n + 1 problem【注意细节】【预计数据不强】【8月21】
The 3n + 1 problem Problem Description Problems in Computer Science are often classified as belongin ...
- Linux fork函数具体图解-同一时候分析一道腾讯笔试题
原创blog.转载请注明出处 头文件: #include<unistd.h> #include<sys/types.h> 函数原型: pid_t fork( void); (p ...
- kbmMW 5.0.1发布了(跨全平台,包括Linux,可使用Win的高性能HTTPSys传输层,等等)
kbmMW5如期发布,作者增加了很多重磅功能,以下翻译作者的发布文件:1.支持Delphi 10.2 Tokyo,包括Linux支持(测试版)2.大量的新功能与改进3.新的智能服务(Smart ser ...
- SDUT OJ 图练习-BFS-从起点到目标点的最短步数 (vector二维数组模拟邻接表+bfs , *【模板】 )
图练习-BFS-从起点到目标点的最短步数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 在古老的魔兽传说中,有两个军团,一个叫天 ...
- sql 简单查询修改
.group by order by from webdb where gathtrime between '2017-06-14 00:00:00' and '2017-06-14 23:59:59 ...