poj1260 pearls
题目大意:珠宝店有许多珠宝,你需要每种珠宝各买一定的数目,各种珠宝的价格是不一样的,每种珠宝买的时候都必须多付10颗该珠宝的钱,但一种珠宝可以用比它更贵的珠宝来代替,所以有时候用更贵的珠宝来充数可能更省钱。现在问你最少要多少钱?输入数据已按珠宝按价格升序排序。
分析:开始想的时候想了一个二维的方程,但是一维就够了。设f[i]表示买了第i种珠宝,前面的珠宝都已经买了或有更贵的充数,此时所花的最少的钱。
则f[i]=min(f[k]+(sum[i]-sum[k]+10)*price[i])
设y=f[k]+sum[i]*price+10*price,x=sum[k],b=prixe[i],g=f[i],则上式变为:g=y-bx
b是递增的,所以有效决策点满足下凸包性质。
这道题我居然把一处Y(j)写成了(j),WA了许多次,真是够了。粗心害死人,一定要细心一点。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 105
int f[MAXN],w[MAXN],sum[MAXN],que[MAXN],head,tail,last;
struct zhu
{
int sum,w;
}arr[MAXN];
int X(int i)
{
return arr[i].sum;
}
int Y(int i)
{return f[i];
}
bool turnup(int i,int j,int k)
{
if((X(j)-X(k))*(long long)(Y(i)-Y(j))>(X(i)-X(j))*(long long)(Y(j)-Y(k)))
return ;
else return ;
}
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
head=tail=;
last=;
que[tail++]=;
f[]=;
arr[].sum=,arr[].w=;
scanf("%d",&n);
for(int i=;i<=n;i++)
{scanf("%d %d",&arr[i].sum,&arr[i].w);
arr[i].sum+=arr[i-].sum;
}
for(int i=;i<=n;i++)
{
while(head<tail-&&Y(que[head+])-Y(que[head])<=arr[i].w*(long long)(X(que[head+])-X(que[head])))
head++;
int best=que[head];
f[i]=f[best]+(arr[i].sum-arr[best].sum+)*(long long)arr[i].w;
while(head<tail-&&turnup(i,que[tail-],que[tail-])==)
tail--;
que[tail++]=i;
}
printf("%d\n",f[n]);
}
}
poj1260 pearls的更多相关文章
- ACM学习历程——POJ1260 Pearls(动态规划)
Description In Pearlania everybody is fond of pearls. One company, called The Royal Pearl, produces ...
- POJ1260 Pearls(dp,矩阵链乘法)
题目链接. 题目大意: 给定一个n,和两个序列a[i], p[i]. a[i] 表示需要购买 i品质 的数量,p[i] i 等级的价格. 1.每个品质都会有不同的价格,价格依据品质上升而上升 2.买一 ...
- 【poj1260】 Pearls
http://poj.org/problem?id=1260 (题目链接) 题意 购买珍珠,所有珍珠分成n个档次,第i个档次购买每个珍珠的价格为p[i],需要购买第i档次的珍珠a[i]个.若要购买第i ...
- Programming pearls 编程珠玑的题目
Programming pearls 编程珠玑的题目 这段时间有空都在看编程珠玑,很经典的一本书,一边看一边用 python 做上面的题目,我做的都放到 github 上了 https://githu ...
- hdu5009 Paint Pearls (DP+模拟链表)
http://acm.hdu.edu.cn/showproblem.php?pid=5009 2014网络赛 西安 比较难的题 Paint Pearls Time Limit: 4000/2000 M ...
- POJ 1260 Pearls
Pearls Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6670 Accepted: 3248 Description In ...
- HDU 5009 Paint Pearls 双向链表优化DP
Paint Pearls Problem Description Lee has a string of n pearls. In the beginning, all the pearls ha ...
- POJ 1260:Pearls(DP)
http://poj.org/problem?id=1260 Pearls Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8 ...
- Pearls
Pearls Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7980 Accepted: 3966 Description In ...
随机推荐
- CentOS 6.3配置PPTP VPN的方法
1.验证ppp 用cat命令检查是否开启ppp,一般服务器都是开启的,除了特殊的VPS主机之外. [root@localhost1 /]# cat /dev/ppp cat: /dev/ppp: No ...
- 标准盒模型与ie盒模型
ff(标准的盒模型) Box的宽高包括 padding .border.margin.content区域 ie Box的宽度包括 margin content区域(content区域包含paddi ...
- Codeforces Round #119 (Div. 2)
A. Cut Ribbon \(f(i)\)表示长为\(i\)的布条最多可以剪几段. B. Counting Rhombi \(O(wh)\)枚举中心计算 C. Permutations 将序列一映射 ...
- c语言开发手机通讯录
// // main.c // 手机通讯录 // // Created by Kevin-Dfg on 16/4/19. // Copyright © 2016年 Kevin-Dfg. All ...
- Linux驱动设计——内存与IO访问
名词解释 内存空间与IO空间 内存空间是计算机系统里面非系统内存区域的地址空间,现在的通用X86体系提供32位地址,寻址4G字节的内存空间,但一般的计算机只安装256M字节或者更少的内存,剩下的高位内 ...
- 科普:浅谈 Hellinger Distance
浅谈 Hellinger Distance 2016.05.24 最近在看 Hellinger Distance(海林格距离), 平时看多了欧式距离,马氏距离等等,貌似介绍这个的材料不是很多,例如:维 ...
- Learn python the hard way. python test program 2016.04.27
# this will not be printed in python ! print "I could have code like this." # and the comm ...
- js获取ifram对象
1.获取iframe对象 var doc=document.getElementById('frameId').contentWindow.document; //var doc=parent.doc ...
- c程序代码优化的一些方法
我认为一个好的用于科学计算的程序代码应该:算法漂亮精妙,程序简洁易懂,运算快速,节省内存.这里有的地方是矛盾的,比如简洁vs易懂,时间vs空间,找个平衡吧.目前来看时间要比空间宝贵一些.写程序分几步: ...
- 通过JavaScript更新UpdatePanel备忘
1<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs ...