题意: n件物品,给出数量和价格,(注意数量和价格都是升序给出的这个是能DP的关键),要买掉所以商品 对于每类物品,所需要的价格是(a[i]+10)*p[i] ,即要多买10件,也可以把价格低的物品合并到高价格的物品那 即 (a[j]+a[i]+10)*p[j];代表把价格为i的物品合并到j上。设dp[i]为买完第i类物品的最优解      dp[i]=min(dp[i],dp[j]+(a[j+1]+a[j+2]+a[i]+10)*p[i]);
即对于第i类物品来说,它最多合并前面的i-1种物品,而且因为物品数目和价格都是升序的,所以可以证明只要 第j类物品能合并,那么再往后就都能合并,因为第j类物品合并省出的钱可以表示为 a[j]*p[i]-(a[j]+10)*p[j] ;如果上式小于0,说明可以合并j,而当j增大,数目和价格都增大,所以只会比j的时候更加省钱,即更能替换。
综上,有两种办法:从前往后推,状态转移方程上面以给出。(主函数)

Time limit   1000 ms

Memory limit     10000 kB

OS     Linux

Source     Northwestern Europe 2002

In Pearlania everybody is fond of pearls. One company, called The Royal Pearl, produces a lot of jewelry with pearls in it. The Royal Pearl has its name because it delivers to the royal family of Pearlania. But it also produces bracelets and necklaces for ordinary people. Of course the quality of the pearls for these people is much lower then the quality of pearls for the royal family.In Pearlania pearls are separated into 100 different quality classes. A quality class is identified by the price for one single pearl in that quality class. This price is unique for that quality class and the price is always higher then the price for a pearl in a lower quality class. 
Every month the stock manager of The Royal Pearl prepares a list with the number of pearls needed in each quality class. The pearls are bought on the local pearl market. Each quality class has its own price per pearl, but for every complete deal in a certain quality class one has to pay an extra amount of money equal to ten pearls in that class. This is to prevent tourists from buying just one pearl. 
Also The Royal Pearl is suffering from the slow-down of the global economy. Therefore the company needs to be more efficient. The CFO (chief financial officer) has discovered that he can sometimes save money by buying pearls in a higher quality class than is actually needed.No customer will blame The Royal Pearl for putting better pearls in the bracelets, as long as the 
prices remain the same. 
For example 5 pearls are needed in the 10 Euro category and 100 pearls are needed in the 20 Euro category. That will normally cost: (5+10)*10+(100+10)*20 = 2350 Euro.Buying all 105 pearls in the 20 Euro category only costs: (5+100+10)*20 = 2300 Euro. 
The problem is that it requires a lot of computing work before the CFO knows how many pearls can best be bought in a higher quality class. You are asked to help The Royal Pearl with a computer program.

Given a list with the number of pearls and the price per pearl in different quality classes, give the lowest possible price needed to buy everything on the list. Pearls can be bought in the requested,or in a higher quality class, but not in a lower one.

Input

The first line of the input contains the number of test cases. Each test case starts with a line containing the number of categories c (1<=c<=100). Then, c lines follow, each with two numbers ai and pi. The first of these numbers is the number of pearls ai needed in a class (1 <= ai <= 1000). 
The second number is the price per pearl pi in that class (1 <= pi <= 1000). The qualities of the classes (and so the prices) are given in ascending order. All numbers in the input are integers.

Output

For each test case a single line containing a single number: the lowest possible price needed to buy everything on the list.

Sample Input

2
2
100 1
100 2
3
1 10
1 11
100 12

Sample Output

330
1344从后往前推。因为对于最后一种状态n,要从前面的n-1种状态中倒着连续合并。(开函数)如下
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int n,dp[10010];
struct node
{int a,b,u,v;
} s[10010];
int dfs(int step)
{if(step<1)return 0;if(dp[step]!=-1)return dp[step];if(step==1)return dp[step]=s[step].u;dp[step]=s[step].u+dfs(step-1);for(int i=step-1; i>=1; i--)dp[step]=min(dp[step],(s[step].v-s[i-1].v+10)*s[step].b+dfs(i-1));return dp[step];
}
int main()
{int m;cin>>m;while (m--){cin>>n;s[0].v=0;memset(dp,-1,sizeof(dp));for(int i=1; i<=n; i++){cin>>s[i].a>>s[i].b;s[i].u=(s[i].a+10)*s[i].b;s[i].v=s[i-1].v+s[i].a;}cout<<dfs(n)<<endl;}return 0;
}

Pearls POJ - 1260(区间记忆化搜索)相关推荐

  1. 「BZOJ1055」[HAOI2008] 玩具取名 - 区间动规 - 记忆化搜索

    ->戳我进原题 [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2486 Solved: 1448 Descript ...

  2. 蓝桥杯 乘积最大(区间dp+记忆化搜索)

    问题描述 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一 ...

  3. Palindrome subsequence HDU - 4632 区间dp|记忆化搜索

    // 区间dp import java.util.Scanner;/**** @author CN*/ public class main {static int mod = 10007;static ...

  4. Codeforces 1293 E. Xenon‘s Attack on the Gangs —— 树上记忆化搜索,单点加改成区间加,有丶东西

    This way 题意: 现在有一棵大小为n的树,你要往边上放0~n-2这n-1个数,定义mex(u,v)表示u到v路径上的第一个未出现的自然数,定义S 问你S最大是多少. 题解: 我感觉这道题绝不止 ...

  5. poj 1085 Triangle War 博弈论+记忆化搜索

    思路:总共有18条边,9个三角形. 极大极小化搜索+剪枝比较慢,所以用记忆化搜索!! 用state存放当前的加边后的状态,并判断是否构成三角形,找出最优解. 代码如下: 1 #include<i ...

  6. poj 1088(记忆化搜索)

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 88560   Accepted: 33212 Description ...

  7. 博弈论(2)DP/记忆化搜索

    博弈问题的话,假设两个人都极度聪明,都会采取最优策略,那么就是也知道了对方也和自己一样聪明,我采取最优策略后,对方也会根据当前状态做出最优策略,简而言之,就是每个玩家都从第一步棋看到了最后一步棋. 先 ...

  8. luogu1514 [NOIp2010]引水入城 (bfs+记忆化搜索)

    我们先bfs一下看看是否能到最底下的所有点 如果不能的话,直接把不能到的那几个数一数就行了 如果能的话: 可以发现(并不可以)某格能到达的最底下的格子一定是一个连续的区间 (因为如果不连续的话,我们先 ...

  9. 动态规划:记忆化搜索

    记忆化搜索和递推都是为了解决子问题重复计算而产生的 虽然动态规划的转移图是一个DAG,但是一个状态可以被其他的状态复用多次 因此为了提高动态规划的效率,记忆化搜索便产生了 但是有时候,状态转移图是不容 ...

最新文章

  1. linux系统photoshop安装教程,在ubuntu中安装photoshop cs6
  2. 阿里移动|《蚂蚁金服移动端高可用技术实践》
  3. 我的世界服务器物品绑定插件,我的世界灵魂绑定插件详解
  4. ${pageContext.request.contextPath}
  5. 【转】Java 内存模型及GC原理
  6. android 倒计时封装,react native中的聊天气泡及timer封装成的发送验证码倒计时
  7. idea+maven打包Java项目
  8. python怎么创建类的例题_Python_面向对象练习题
  9. Python模块——matplotlib模块详解
  10. php imagemagick安装,在CentOS上为PHP安装Imagick和ImageMagick
  11. Android Android.mk脚本结构
  12. 《FireShot》一键滚动截屏整个网页
  13. 麒麟子Javascript游戏编程零基础教程大纲
  14. Vue使用自定义字体
  15. 详解迭代器的 fail-fast 与 fail-safe 机制
  16. java会变得更简单吗_spring 第一篇(1-1):让java开发变得更简单(下)
  17. 电脑16G内存升级成32G内存日常使用区别大么?
  18. 成成你好呀(C知识点整理二)
  19. 程序员赚外快到底有哪些途径?干货篇
  20. 自签 https 证书

热门文章

  1. C和指针之动态内存分配(读取范围在1和标准输入读取的size之前每个数据出现的次数)
  2. C和指针之结构体大小和成员变量位置距离结构开始存储的位置偏移字节
  3. Android之TypedArray 为什么需要调用recycle()
  4. 《看聊天记录都学不会C语言?太菜了吧》(13)(9*9 乘法表)寻找电脑中的盲盒彩蛋
  5. java把对象转成json_java 把对象 对象转换成json字符串 | 学步园
  6. html点击关闭代码,怎样开放和关闭html代码?
  7. 心中一万只草泥马在奔腾是种怎样的体验?| 今日最佳
  8. uiuc计算机课程,UIUC计算机科学专业解读
  9. python版本差异_python的版本的差别 2,3
  10. linux新建文件夹明率,linux新建文件和文件夹命令