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 ...
随机推荐
- linux.打包与压缩
//打包tar -zcvf etc.tar.gz /etc//解包tar -zxvf hdmzy.tar.gz
- IDOC、ALE、EDI三者之间的区别于联系
EDI (Electronic data interchange) - 是指按照同一规定的一套通用标准格式,将标准的经济信息,通过通信网络传输,在贸易伙伴的电子计算机系统之间进行数据交换和自动处理.由 ...
- ListView优化相关
链接1 http://www.jb51.net/article/35273.htm 链接2 http://www.cnblogs.com/xilinch/archive/2012/11/08/2760 ...
- php遇见的错误(一)
1.linux 执行脚本时报的错 Call to a member function on a non-object in 是没有实例化对象 解决方法 new类2.在给一个表增加一个新字段或者改 ...
- google-http-java-client(android学习篇2源码)
package com.google.api.services.samples.googleplus.cmdline.simple; import com.google.api.client.ht ...
- Python学习(1)
幂运算符比取反(一元运算符)的优先级要高. >>>-3**2 -9 >>>(-3)**2 9 >>>pow(2,3) 8 abs函数可以得到数的绝 ...
- 用 C# 在 Windows 7 中写注册表想到的
摘自:http://blog.163.com/dpj_001/blog/static/2742941520110251500753/ 某日做一个项目,需要在注册表中加入键,同时写值,操作系统环境为 W ...
- 浅谈 Active Learning
1. Active Query Driven by Uncertainty and Diversity for Incremental Multi-Label Learning The key tas ...
- java CS结构软件自动升级的实现
前段时间做了一个工具发布给公司的各部门使用后反馈了不少BUG,每次修改后均需要发邮件通知各用户替换最新版本,很不方便,因此后来就写了一个自动升级的功能,这样每次发布新的版本时只需要将其部署到自动升级服 ...
- Linux 挂载新硬盘
Linux 的硬盘识别 在 /dev/ 下建立相应的设备文件.如 sda 表示第一块 SCSI 硬盘 hda 表示第一块 IDE 硬盘(即连接在第一个 IDE 接口的 Master 口上) scd0 ...