题意:有n种不同的珍珠 每种珍珠的价格不同  现在给出一个采购单 标注了需要不同等级的珍珠和相对于的个数(输入按价格升序排列)

  其中 价格为   (当前种类价格+10)*购买数量  这样就有一种诡异的现象,当你把购买x个 低价格珍珠的时候 可能还没有把x个低价格珍珠

  换成高价格珍珠来购买 总价更便宜 同时采购上的珍珠只能低的换高的价格买 让你求最小总价

  思路: 1. 不能跳跃着换  比如  价格分别为  x  x+1 x+2  不可能 x+1不动只换x到x+2买 因为如果x换到x+2买总价可以更便宜,那么换到x+1买肯定更更更便宜

     2.因为不能跳跃着换,但存在一种情况:一层一层往右边叠  比如上述 x 换到x+1   再把原先x(现在在x+1)和x+1的换到x+2更便宜

     3.购买珍珠数量一定  因为没有什么满多少打折等骚操作 所以不可能多买  多买一定要多付钱

  令dp[i]表示在已知第i类珍珠时,所需支付的最低价格

  则状态方程为:

  dp[i]=(a[i]+10)*p[i]+dp[i-1];  //当第i种珍珠出现时,未优化价格的情况

  dp[i]=min(dp[i],(sum[i]-sum[j]+10)*p[i]+dp[j]);  //枚举j,价格优化

  参考:https://blog.csdn.net/lyy289065406/article/details/6648131
  

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=;
int a[maxn],dp[maxn],sum[maxn],p[maxn];
int main(){
int t ;
scanf("%d",&t);
while(t--){
int n;
sum[]=;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d%d",&a[i],&p[i]);
sum[i]=sum[i-]+a[i];
}
dp[]=;
for(int i=;i<=n;i++){
dp[i]=(+a[i])*p[i]+dp[i-];
for(int j=;j<=i;j++){
dp[i]=min(dp[i],dp[j-]+(sum[i]-sum[j-]+)*p[i]);
}
}
cout<<dp[n]<<endl; } return ;
}

Pearls POJ - 1260 dp的更多相关文章

  1. poj 1260 dp

    Description In Pearlania everybody is fond of pearls. One company, called The Royal Pearl, produces ...

  2. POJ 1260 Pearls 简单dp

    1.POJ 1260 2.链接:http://poj.org/problem?id=1260 3.总结:不太懂dp,看了题解 http://www.cnblogs.com/lyy289065406/a ...

  3. POJ 1260:Pearls(DP)

    http://poj.org/problem?id=1260 Pearls Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8 ...

  4. poj 1260 Pearls(dp)

    题目:http://poj.org/problem?id=1260 题意:给出几类珍珠,以及它们的单价,要求用最少的钱就可以买到相同数量的,相同(或更高)质量的珍珠. 珍珠的替代必须是连续的,不能跳跃 ...

  5. (线性结构dp )POJ 1260 Pearls

    Pearls Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10558   Accepted: 5489 Descripti ...

  6. POJ 1260:Pearls 珍珠DP

    Pearls Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7947   Accepted: 3949 Descriptio ...

  7. POJ 1260 Pearls (斜率DP)题解

    思路: 直接DP也能做,这里用斜率DP. dp[i] = min{ dp[j] + ( sum[i] - sum[j] + 10 )*pr[i]} ; k<j<i  =>  dp[j ...

  8. poj 1260 Pearls 斜率优化dp

    这个题目数据量很小,但是满足斜率优化的条件,可以用斜率优化dp来做. 要注意的地方,0也是一个决策点. #include <iostream> #include <cstdio> ...

  9. POJ 1260 Pearls

    Pearls Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6670 Accepted: 3248 Description In ...

随机推荐

  1. iOS开发简记(6):storyboard的使用

    从xib到storyboard,iOS界面开发的方式在变化. 这里记录怎么使用storyboard来完成简单的界面开发,比如实现一个“我”的简单界面. (1)新建storyboard 在新建文件向导中 ...

  2. 你不知道的腾讯社招面试经验(已offer)

    # 你不知道的腾讯社招面试经验(已offer) ## 背景 最近一段时间换工作,成功获得了腾讯的offer.在这里有点经验跟大家分享,我觉得,比起具体的面试题,有些东西更加重要,你知道这些东西,再去准 ...

  3. LeetCode 961. N-Repeated Element in Size 2N Array

    In a array A of size 2N, there are N+1 unique elements, and exactly one of these elements is repeate ...

  4. Django Rest framework基础使用之 serializer

    rest-framework文档地址:http://www.django-rest-framework.org/ Django Rest framework是一个非常强大且灵活的工具包,用于构建web ...

  5. Python-爬虫的基本原理

    什么是爬虫 爬虫就是请求网站并提取数据的自动化程序.其中请求,提取,自动化是爬虫的关键!下面我们分析爬虫的基本流程 爬虫的基本流程 发起请求通过HTTP库向目标站点发起请求,也就是发送一个Reques ...

  6. Array Division CodeForces - 808D (构造+实现)

    Vasya has an array a consisting of positive integer numbers. Vasya wants to divide this array into t ...

  7. 使用matplotlib画饼图

    import matplotlib.pyplot as pltx = [4, 9, 21, 55, 30, 18]labels = ['math', 'history', 'chemistry', ' ...

  8. 打开指定测试App的指定Activity

    那究竟应该如何让appium去自动找到指定的APP和指定的Activity呢?想要打开指定的App,需要知道App的包名,同样想要打开指定Activity也需要知道其名,如何获取? 1.问公司的开发人 ...

  9. React不同版本之间需要注意的地方

    React Fiber react fiber指的是react16.0机器之后的版本,相对于之前的版本来说,这一个版本的更新做了很多的优化,所以和之前的版本中的用法可能会发生不同,所以,平常开发中,主 ...

  10. Docker bridge br0 pipework

    Docker Centos7 下建立 Docker 桥接网络 - weifengCorp - 博客园https://www.cnblogs.com/weifeng1463/p/7468497.html ...