玲珑学院OJ 1074 Pick Up Coins【区间dp】
来源:互联网 发布:兄贵音源软件 编辑:程序博客网 时间:2024/05/03 17:51
Time Limit:10s Memory Limit:1024MByte
Submissions:385Solved:153
There are n coins in a line, indexed from 0 to n-1. Each coin has its ownvalue.You are asked to pick up all the coins to get maximum value. If the you pickcoini (1 ≤ i ≤n-2), you will getvalue[left]×value[i]×value[right]value[left]×value[i]×value[right] coin value. Here left and right are adjacent indices of i. After the picked, the left and right then becomes adjacent.
Note.
If you pick the first coin, you can assume the value[left] is 1.
If you pick the last coin, you can assume the value[right] is 1.
Find the maximum value when you pick up all the coins.
For each test case:
The first line contains a number nn (3≤ nn ≤103) — The number of magic coins.
The second line contains nn numbers ( all numbers ≤10) — The value of each coin.
题目大意:
每一次选择一个数,得到的val是这个数和两边的数的乘积,求最大值。
1、观察到数据范围以及操作方式,很显然的一道区间dp的问题,矩阵连乘最大操作数问题。
设定dp【i】【j】表示已经拿完了区间:【i,j-1】的所有数之后的最小总价值。
2、那么其状态转移方程的重点放在区间合并上来:
dp【i】【j】=min(dp【i】【j】,dp【i】【k】+dp【k+1】【j】+a【k】*a【j】*a【i-1】);
3、那么ans-dp【1】【n】+a【0】*a【n-1】+max(a【0】,a【n-1】);
Ac代码:
#include<stdio.h>#include<iostream>#include<string.h>using namespace std;int dp[1250][1250];int a[1250];int main(){ int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } memset(dp,0,sizeof(dp)); for(int len=1;len<n;len++) { for(int i=1;i<n-1;i++) { int j=i+len; if(j>=n)break; for(int k=i;k<j;k++) { dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+a[k]*a[i-1]*a[j]); } } } printf("%d\n",dp[1][n-1]+a[0]*a[n-1]+max(a[0],a[n-1])); }}
- 玲珑学院OJ 1074 Pick Up Coins【区间dp】
- 玲珑杯 1074 - Pick Up Coins(区间DP)
- 玲珑杯 1074 - Pick Up Coins (选硬币 || 区间DP)
- [ifrog 1074 Pick Up Coins] 区间DP
- 【玲珑杯R7 D】Pick Up Coins
- DP —— 玲珑学院OJ 1091
- 玲珑OJ 1070 (区间DP)
- 玲珑学院OJ 1126
- 玲珑学院OJ 1125
- 玲珑学院OJ 1131
- 玲珑学院OJ 1121
- 玲珑学院OJ 1130
- DP+预处理优化——玲珑学院OJ 1108
- 玲珑学院oj Round#7
- 【玲珑学院 1050 - array 】+ dp
- 玲珑学院 1050 - array--dp
- 玲珑学院OJ 1091 Black and White【dp+前缀和】经典模型
- 玲珑学院OJ 1097 萌萌哒的第二题【dp+线段树】
- less打包样式文件
- SQL中存储过程和函数的标准写法
- 提高C#编程水平的50个要点 之四“使用条件属性 (Conditional Attributes) 来代替条件编译语句 #if”
- 一个比较有趣的脚本
- Block
- 玲珑学院OJ 1074 Pick Up Coins【区间dp】
- IntelliJ IDEA For Mac 快捷键
- 2016-前端面试
- ZOJ
- C++输入输出流缓冲区
- jieba词性和句法分析树标注集
- [生存志] 第130节 司马著史记
- Python位运算符
- POJ2823_Sliding Window_优先队列||线段树