POJ-1260-Pearls-dp+理解题意
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 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
Sample Input
2
2
100 1
100 2
3
1 10
1 11
100 12
Sample Output
330
1344
这一题的dp比较好理解,关键是从英文转化成中文再转化成目标性的语句有困难。
题意:
先给t组测试样例,再给出n组数据,代表n组珍珠质量等级数,前者代表珍珠所属的质量等级,后者代表该质量等级里面的每颗珍珠的价格,质量等级和珍珠的价格都是升序。第一组数据说的是如果我要买3颗珍珠,一个等级一个等级购买的话需要(100+10)*1+(100+10)*2 =330元,但是如果全部按第二等级来买,需要(202+10)*2=424元,所以最小花费是330元,以此类推。要求求出最少花费价格去购买所有数量的珍珠。
https://blog.csdn.net/SDUTyangkun/article/details/52225285 这里面讲的很详细了
自己的理解:
//解该题的关键在于珍珠的类别(也就是质量)和数量是呈上升趋势的
//每一个状态都是从上一个状态推算来的,所以可以推出动态规划的表达式 #include<iostream>
#include<string.h>
#include<queue>
#include<stack>
#include<cmath>
#include<map>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std; struct node
{
int num;
int p;
}a[]; int dp[],sum[];
int main()
{
std::ios::sync_with_stdio(false);
cin.tie();
cout.tie();
int t,n;
cin>>t;
while(t--)
{
memset(dp,,sizeof(dp));
memset(a,,sizeof(a));
memset(sum,,sizeof(sum));
cin>>n;
sum[]=;
for(int i=;i<=n;i++)
{
cin>>a[i].num>>a[i].p;
sum[i]=sum[i-]+a[i].num;
} dp[]=;
for(int i=;i<=n;i++)
{
dp[i]=(a[i].num+)*a[i].p+dp[i-];
//需要加上dp[i-1]
//因为(a[i].num+10)*a[i].p是当前位置的珍珠的价格,还未进行优化之前的;
//需要再加上之前所有状态的
for(int j=;j<i;j++)
//注意一下,这里的j从0开始,不是从1
//因为是从上一个状态得来的,要是从1开始,在i=1的时候会产生错误
{
dp[i]=min(dp[i],dp[j]+(sum[i]-sum[j]+)*a[i].p);
}
}
cout<<dp[n]<<endl;
}
return ;
}
POJ-1260-Pearls-dp+理解题意的更多相关文章
- poj 1260 Pearls(dp)
题目:http://poj.org/problem?id=1260 题意:给出几类珍珠,以及它们的单价,要求用最少的钱就可以买到相同数量的,相同(或更高)质量的珍珠. 珍珠的替代必须是连续的,不能跳跃 ...
- POJ 1260 Pearls 简单dp
1.POJ 1260 2.链接:http://poj.org/problem?id=1260 3.总结:不太懂dp,看了题解 http://www.cnblogs.com/lyy289065406/a ...
- (线性结构dp )POJ 1260 Pearls
Pearls Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10558 Accepted: 5489 Descripti ...
- POJ 1260 Pearls (斜率DP)题解
思路: 直接DP也能做,这里用斜率DP. dp[i] = min{ dp[j] + ( sum[i] - sum[j] + 10 )*pr[i]} ; k<j<i => dp[j ...
- poj 1260 Pearls 斜率优化dp
这个题目数据量很小,但是满足斜率优化的条件,可以用斜率优化dp来做. 要注意的地方,0也是一个决策点. #include <iostream> #include <cstdio> ...
- POJ 1260 Pearls (动规)
Pearls Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7210 Accepted: 3543 Description In ...
- POJ 1260 Pearls
Pearls Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6670 Accepted: 3248 Description In ...
- POJ 1260:Pearls(DP)
http://poj.org/problem?id=1260 Pearls Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8 ...
- POJ 1404 I-Keyboard (DP)
http://poj.org/problem?id=1404 题意 :手机上的要发短信的话,“我”字需要先按一下9键,再按3下6键,所以,现在想要重新布局每个键上的字母数,让最后的那个值最小,也就是说 ...
- poj 50道dp题
1.poj 3267 题意:给你一个字符串,下面有若干单词,问字符串要变成由下面单词组成的字符串,至少要删除多少个字母...... 例如: 6 10 browndcodw cow milk whit ...
随机推荐
- 传输文件到docker容器
传输文件到docker容器 首先需要知道docker容器的container_id,可以使用docker ps命令来查看你要操作的docker容器的container_id Docker容器向宿主机传 ...
- java内省Introspector
大纲: JavaBean 规范 内省 一.JavaBean 规范 JavaBean —般需遵循以下规范. 实现 java.io.Serializable 接口. javaBean属性是具有getter ...
- Spring boot热部署实战
1.介绍 在开发工程中,修改一点儿代码,想看效果就需要重新启动服务,这样会花费大量时间在重启服务上,通过devtools热部署可以大大减少重启服务的时间. 之所以能减少时间,是因为Spring Boo ...
- cocos2D-X 常见49种Action
bool HelloWorld::init() { ////////////////////////////// // 1. super init first if ( !CCLayer::init( ...
- 使用jQuery对象
1基本行为 * size()/length: 包含的DOM元素个数 * [index]/get(index): 得到对应位置的DOM元素 * each(): 遍历包含的所有DOM元素 * index( ...
- HTML5表格(table)篇
初学HTML接触table少不了,但是实际应用的地方也有. 简单说明HTML <table> 标签 定义和用法 <table> 标签定义 HTML 表格. 简单的 HTML 表 ...
- 字符串hash+找模数——cf985F
19260817比自然溢出都要好使 /* 把原串变成用26个01串表示,第i个串对应的字符是i 然后进行字符串hash,s和t双射的条件是26个串的hash值排序后一一相等 */ #include&l ...
- redis笔记--------Jedis使用
redis安装和启动就不说了 一.准备工作 1.redis -cli -p 6379 2.eclipse中新建项目,并导入jedis相关包 3.测试jedis连通性 二.Jedis常用API (哈希) ...
- 6.RabbitMQ Linux安装
RabbitMQ在Linux上安装,需要很多依赖库,如何不能解决依赖库德版本问题,可能会比较麻烦,最好结合Yum进行安装,我这里使用的Linux环境是64位CentOS6.2 ,使用Yum源是阿里云的 ...
- CodeForces-1221A-2048 Game-思维题
You are playing a variation of game 2048. Initially you have a multiset ss of nn integers. Every int ...