题目大意:

买珍珠,每买一种珍珠需要额外付出十个这种珍珠的钱,但你可以买比这种珍珠高品质的珍珠来替换它(那么就只需要那高品质付出那额外的十个珍珠的钱了,但是每个珍珠的价钱也变化了)

这是一个dp。

令dp[i]为只买前i种珍珠的最少花费钱数,

状态转移方程为dp[i] = min(dp[i],dp[j]+sum);

这里j<i, sum为j之后到i种珍珠均用第i种珍珠替换所需要的钱数;

sum是很好解决的。

那么有人问了,这个状态转移只能求第i种只替换前面连续种珍珠的情况,如果是像1和3都用第三种珍珠替换,而第二种自己买你的不就不能求了。也就是说如果某种珍珠需要替换前面不连续的几种的话怎么办呢?

现在我们来证明那种情况是不存在的。

我们设每种的价格为xi,每种需要买的个数为ni,每买一种需要额外付出的钱数为ci。

情况一为1,3种珍珠一起买,2珍珠单独买;

那么需要(n1+n3+10)*x3+(n2+10)*x2;

情况2为1,2种珍珠一起买,3珍珠单独买;

则需要(n3+10)*x3+(n1+n2+10)*x2;

如果情况一比情况2学要的钱数少,列不等式可得x3<=x2。

那么2种珍珠也应该用3来替换这样显然更省钱(少付了额外十个2种珍珠的钱);

所以1用3替换那么2就肯定也用3来替换;

推广起来;

如果某一种珍珠替换了前面不连续种珍珠为最优解;

那么就说明替换的最前面珍珠的后面那些没替换的珍珠的单价大于用来替换的珍珠的单价;

那么那些没替换的替换点显然为更优解,所以被替换的珍珠必然不能是不连续的,而且要紧挨着用来替换的珍珠;

证明完毕;

上代码;

#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
const int maxa = ;
int sum[maxa];
int dp[maxa];
int a[maxa], b[maxa];
int main(){
int t, n;
scanf("%d", &t);
while(t--){
scanf("%d", &n);
for(int i = ; i <= n; i++){
scanf("%d%d", &a[i], &b[i]);
sum[i] = sum[i-] + a[i];
}
for(int i = ; i <= n; i++){
int mina = (<<);
for(int k = ; k < i; k++){
mina = min(mina, dp[k] +(sum[i] - sum[k]+)*b[i]);
}
dp[i] = mina;
}
printf("%d\n", dp[n]);
}
}

acm poj1260 dp的更多相关文章

  1. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  2. 【转载】ACM总结——dp专辑

    感谢博主——      http://blog.csdn.net/cc_again?viewmode=list       ----------  Accagain  2014年5月15日 动态规划一 ...

  3. Codeforces Round #240 (Div. 1)B---Mashmokh and ACM(水dp)

    Mashmokh's boss, Bimokh, didn't like Mashmokh. So he fired him. Mashmokh decided to go to university ...

  4. bzoj 1030: [JSOI2007]文本生成器 (ac自己主动机上的dp)

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 2635  Solved: 1090 [id=1030&qu ...

  5. WOJ1022 Competition of Programming 贪心 WOJ1023 Division dp

    title: WOJ1022 Competition of Programming 贪心 date: 2020-03-19 13:43:00 categories: acm tags: [acm,wo ...

  6. 【题解】SDOI2014数数

    真的很开心呢,总算是有一道完完全全由自己做出来的题目啦~ 这一道题目洛谷P3311和另一道JSOI文本生成器的题目是十分相像的,dp方面几乎相同.只是<=n的约束,让这道题目必须结合数位dp的方 ...

  7. DP(Dynamic programming)——尽力学习之中(2016 HUAS ACM 暑假集训-5)

    这周不打算按照以往的方式更新博客,而是采用整体的方式.一是因为学的太少,没东西写:二是这篇博客会经常更新的.如题,DP——尽力学习之中. ------------------------------- ...

  8. HDU 4064 Carcassonne(插头DP)(The 36th ACM/ICPC Asia Regional Fuzhou Site —— Online Contest)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4064 Problem Description Carcassonne is a tile-based ...

  9. 2016 ACM/ICPC Asia Regional Shenyang Online 1009/HDU 5900 区间dp

    QSC and Master Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

随机推荐

  1. DEDE常见的错误(转)

    1:dedecms文章录入的时候,如何控制文章重复.   在dede/article_add.php里面,加入该程序就OK了    if($cfg_check_title == 'Y'){      ...

  2. PHP微信红包的算法实现探讨

    header("Content-Type: text/html;charset=utf-8");//输出不乱码,你懂的 $total=10;//红包总额 $num=8;// 分成8 ...

  3. [算法]线段树(IntervalTree)

    转载请注明出处:http://www.cnblogs.com/StartoverX/p/4617963.html 线段树是一颗二叉搜索树,线段树将一个区间划分成一些单元区间,每一个区间对应线段树的一个 ...

  4. 在centos中使用vim编辑器

    下面用编辑crontab举个例子: 在命令行输入 crontab -e 会直接进入vim编辑模式编辑crontab文件. 随后可以输入“i”进入insert模式 然后移动光标在指定的位置添加文字,可以 ...

  5. IOS面试攻略

    IOS面试攻略(1.0) 2013-10-13 20:58:09|  分类: IOS面试 |  标签:ios知识点总汇  ios面试  |举报|字号 订阅     来自:伊甸网 @ 看到这个关键字,我 ...

  6. Apache Cloudstack Development 101 -- Data Access Layer

    刚接触CloudStack,也是第一次翻译英文文档,限于水平有限,不当之处欢迎拍砖! 原文地址:https://cwiki.apache.org/confluence/display/CloudSta ...

  7. QT中使用Glut库

    用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是说“glutSolidSphere”: 找不到标识符 ...

  8. 用Setup系列函数完成驱动卸载安装[驱动安装卸载程序]

    // InstallWDFDriver.cpp : Defines the entry point for the console application. // #include "std ...

  9. 【HDOJ】4541 Ten Googol

    打表的大水题. /* 4541 */ #include <cstdio> #include <cstdlib> #include <cstring> , , , } ...

  10. 2014-08-04 BBS主页页面的设计

    今天是在吾索实习的第19天.这天,开始参照一开始设计的界面原型,真真正正地进行BBS界面的设计.在运用.NET进行界面设计时,发现没有用RP进行界面设计来得容易,很多都要再进行更精细的操作,才能达到原 ...