Best Financing

Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 148    Accepted Submission(s): 35

Problem Description
小A想通过合理投资银行理財产品达到收益最大化。已知小A在未来一段时间中的收入情况,描写叙述为两个长度为n的整数数组dates和earnings,表示在第dates[i]天小A收入earnings[i]元(0<=i<n)。银行推出的理財产品均为周期和收益确定的,可描写叙述为长度为m的三个整数数组start、finish和interest_rates, 若购买理財产品i(0<=i<m),须要在第start[i]天投入本金,在第finish[i]天可取回本金和收益,在这期间本金和收益都无法取回,收益为本金*interest_rates[i]/100.0。当天取得的收入或理財产品到期取回的本金当天就可以购买理財产品(注意:不考虑复利,即购买理財产品获得的收益不能用于购买兴许的理財产品)。假定闲置的钱没有其它收益,如活期收益等,全部收益仅仅能通过购买这些理財产品获得。求小A能够获得的最大收益。



限制条件:

1<=n<=2500

1<=m<=2500

对于随意i(0<=i<n),1<=dates[i]<=100000,1<=earnings[i]<=100000, dates中无反复元素。

对于随意i(0<=i<m),1<=start[i]<finish[i]<=100000, 1<=interest_rates[i]<=100。
 
Input
第一行为T (T<=200),表示输入数据组数。

每组数据格式例如以下:

第一行是n m

之后连续n行,每行为两个以空格分隔的整数,依次为date和earning

之后连续m行,每行为三个以空格分隔的整数,依次为start, finish和interest_rate
 
Output
对第i组数据,i从1開始计,输出

Case #i:

收益数值,保留小数点后两位,四舍五入。
 
Sample Input
2
1 2
1 10000
1 100 5
50 200 10
2 2
1 10000
5 20000
1 5 6
5 9 7
 
Sample Output
Case #1:
1000.00
Case #2:
2700.00
 
Source
 
Recommend
liuyiding   |   We have carefully selected several similar problems for you:  4831 4830 4829 4828 4827 
 

思路:

将起点终点离散化,之后用起点做DP

/*************************************************************************
> File Name: hdu-4833-Best-Financing.cpp
> Author: nealgavin
> Mail: nealgavin@126.com
> Created Time: Mon 26 May 2014 07:28:57 PM CST
************************************************************************/ #include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
const int mm = 5009;
const int nn = 100003;
class Income{
public:
int date;
int earning;
}salry[mm]; class Contral{
public:
int start;
int finish;
int interest_rates;
}earn[mm]; int T,n,m;
int f[nn],day_in[nn],all_in[nn];
int dp[mm];
map<int,int>mp;
vector<int>vc[2][mm]; int main()
{
while(~scanf("%d",&T))
{
for(int ca=1;ca<=T;++ca)
{
scanf("%d %d",&n,&m);
memset(day_in,0,sizeof(day_in));
memset(all_in,0,sizeof(all_in));
for(int i=0;i<n;++i)
{
scanf("%d %d",&salry[i].date,&salry[i].earning);
all_in[ salry[i].date ] += salry[i].earning;
}
for(int i=1;i<nn;++i)
all_in[i] += all_in[i-1];
for(int i=0;i<m;++i)
scanf("%d %d %d",&earn[i].start,&earn[i].finish,&earn[i].interest_rates);
for(int i=0;i<m;++i)
for(int i=0;i<m;++i)
{
f[i] = earn[i].start;
f[i+m] = earn[i].finish;
}
sort(f,f+m+m);
int pos = unique(f,f+m+m)-f;
mp.clear();
for(int i=0;i<pos;++i)
mp[ f[i] ] = i;
day_in[ 0 ] = all_in[ f[0] ];
for(int i=1;i<pos;++i)
day_in[ i ] = all_in[ f[i] ] - all_in[ f[i-1] ]; for(int i=0;i<2;++i)
for(int j=0;j<pos;++j)
vc[i][j].clear(); for(int i=0;i<m;++i)
{
earn[i].start = mp[ earn[i].start ];
earn[i].finish = mp[ earn[i].finish ];
vc[0][ earn[i].start ].push_back(earn[i].finish);
vc[1][ earn[i].start ].push_back(earn[i].interest_rates);
}
memset(dp,0,sizeof(dp));
for(int i=pos-1;i>=0;--i)
{
dp[i] = dp[i+1];
int sz = vc[0][i].size();
for(int j=0;j<sz;++j)
{
dp[i] = max(dp[i],dp[ vc[0][i][j] ]+vc[1][i][j]);
// cerr<<"in"<<i<<" "<<dp[i]<<" "<<vc[0][i][j]<<" "<<vc[1][i][j]<<endl;
}
}
long long ans = 0;
for(int i=0;i<pos;++i)
ans += (long long)dp[i]*day_in[i];
printf("Case #%d:\n",ca);
printf("%.2f\n",(double)ans/100);
}
}
return 0;
}

hdu-4833-Best-Financing(DP)的更多相关文章

  1. HDU 4833 Best Financing(DP)(2014年百度之星程序设计大赛 - 初赛(第二轮))

    Problem Description 小A想通过合理投资银行理财产品达到收益最大化.已知小A在未来一段时间中的收入情况,描述为两个长度为n的整数数组dates和earnings,表示在第dates[ ...

  2. HDU 4833 Best Financing (DP)

    Best Financing Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. HDU 5791:Two(DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=5791 Two Problem Description   Alice gets two sequences A ...

  4. hdu4833 Best Financing(DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4833 这道题目关键的思想是从后往前dp,dp[i]表示在第i处投资xi能获得的最大收益,其中xi表示从 ...

  5. HDU 1422 重温世界杯(DP)

    点我看题目 题意 : 中文题不详述. 思路 : 根据题目描述及样例可以看出来,如果你第一个城市选的是生活费减花费大于等于0的时候才可以,最好是多余的,这样接下来的就算是花超了(一定限度内的花超),也可 ...

  6. HDU 1176 免费馅饼(DP)

    点我看题目 题意 : 中文题.在直线上接馅饼,能接的最多是多少. 思路 :这个题其实以前做过.....你将这个接馅饼看成一个矩阵,也不能说是一个矩阵,反正就是一个行列俱全的形状,然后秒当行,坐标当列, ...

  7. hdu 4055 Number String(dp)

    Problem Description The signature of a permutation is a string that is computed as follows: for each ...

  8. 【HDU - 4345 】Permutation(DP)

    BUPT2017 wintertraining(15) #8F 题意 1到n的排列,经过几次置换(也是一个排列)回到原来的排列,就是循环了. 现在给n(<=1000),求循环周期的所有可能数. ...

  9. HDU 5375 Gray code(DP)

    题意:给一串字符串,里面可能出现0,1,?,当中问号可能为0或1,将这个二进制转换为格雷码后,格雷码的每位有一个权值,当格雷码位取1时.加上该位权值,求最大权值和为多少. 分析:比赛的时候愚了.竟然以 ...

  10. hdu 1158 Employment Planning(DP)

    题意: 有一个工程需要N个月才能完成.(n<=12) 给出雇佣一个工人的费用.每个工人每个月的工资.解雇一个工人的费用. 然后给出N个月所需的最少工人人数. 问完成这个项目最少需要花多少钱. 思 ...

随机推荐

  1. 细节!重点!易错点!--面试java基础篇(二)

    今天来给大家分享一下java的重点易错点第二部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.字符串创建与存储机制:当创建一个字符串时,首先会在常量池中查找是否已经有相同的字符串被定义,其判断 ...

  2. overflow:hidden与position:absolute

    在做一个下拉框的动画效果中遇到了这个bug,记录一下. 在写下拉框的动画的时候,一般我们的做法都是把下拉框的外盒子设为overflow:hidden,然后设下外层盒子高度,之后通过js慢慢的改变高度从 ...

  3. Visual Studio 必备神器---转

    会使用工具是人类文明的一大进步,今天敏捷大行其道,好的工具可以大大的提高生产力,这里说的工具都是VS平台上的扩展工具,一些机械的部分可以交给工具去处理,自己多关注其他部分.下面分享下我觉得不错的工具, ...

  4. 北京出dell s2740显示器 1900 - V2EX

    水木社区归档站 北京出dell s2740显示器 1900 - V2EX 北京出dell s2740显示器 1900 By kekex · 6 小时 6 分钟前 · 188 次点击 购于今年4月份 镜 ...

  5. 如何在SourceInsight中选中匹配的大括号中的内容

    如何在SourceInsight中选中匹配的大括号中的内容 要分析的代码很长,多个for,if等分析嵌套在一起,代码有点乱,找到了这个分支的头,却不知道尾在哪,找到了尾却不知道哪是开头,在网上找了一下 ...

  6. Cocos2d-x学习笔记(5)

    Cocos2d-x基本元素介绍: 1.CCDirector:大总管 这是控制游戏流程的主要组件,包含设定游戏呈现窗体.FPS显示.默认帧率上限.纹理颜色位宽等切换当前游戏场景.暂停或恢复场景执行.通过 ...

  7. ALV前导零的问题

    ALV的IT_FIELDCAT参数中L_ZERO 选项置位的话,对NUM类型的前导0是可以输出的,但是有个很重要的前提条件,NO_ZERO不可以置位,否则L_ZERO是失效的.

  8. find: paths must precede expression(转)

    find: paths must precede expressionUsage: find [-H] [-L] [-P] [path...] [expression] 然后就上网查了一下,结果搜索到 ...

  9. boost::asio设置同步连接超时

    boost::asio设置同步连接超时   CSDN上求助无果,只好用自创的非主流方法了.asio自带的例子里是用deadline_timer的async_wait方法来实现超时的,这种方法需要单独写 ...

  10. cuzysdk购物模块 36kr+本期背景图

    说好的剧透,虽然来的稍微晚不少 cuzysdk(www.cuzy.com) 是一个手机淘宝客sdk,通过使用cuzy,可以获取taobao平台的推广商品数据,移动开发者把推广的商品数据呈现给用户,用户 ...