hdu-4833-Best-Financing(DP)
Best Financing
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 148 Accepted Submission(s): 35
限制条件:
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。
每组数据格式例如以下:
第一行是n m
之后连续n行,每行为两个以空格分隔的整数,依次为date和earning
之后连续m行,每行为三个以空格分隔的整数,依次为start, finish和interest_rate
Case #i:
收益数值,保留小数点后两位,四舍五入。
2
1 2
1 10000
1 100 5
50 200 10
2 2
1 10000
5 20000
1 5 6
5 9 7
Case #1:
1000.00
Case #2:
2700.00
思路:
将起点终点离散化,之后用起点做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)的更多相关文章
- HDU 4833 Best Financing(DP)(2014年百度之星程序设计大赛 - 初赛(第二轮))
Problem Description 小A想通过合理投资银行理财产品达到收益最大化.已知小A在未来一段时间中的收入情况,描述为两个长度为n的整数数组dates和earnings,表示在第dates[ ...
- HDU 4833 Best Financing (DP)
Best Financing Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 5791:Two(DP)
http://acm.hdu.edu.cn/showproblem.php?pid=5791 Two Problem Description Alice gets two sequences A ...
- hdu4833 Best Financing(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4833 这道题目关键的思想是从后往前dp,dp[i]表示在第i处投资xi能获得的最大收益,其中xi表示从 ...
- HDU 1422 重温世界杯(DP)
点我看题目 题意 : 中文题不详述. 思路 : 根据题目描述及样例可以看出来,如果你第一个城市选的是生活费减花费大于等于0的时候才可以,最好是多余的,这样接下来的就算是花超了(一定限度内的花超),也可 ...
- HDU 1176 免费馅饼(DP)
点我看题目 题意 : 中文题.在直线上接馅饼,能接的最多是多少. 思路 :这个题其实以前做过.....你将这个接馅饼看成一个矩阵,也不能说是一个矩阵,反正就是一个行列俱全的形状,然后秒当行,坐标当列, ...
- hdu 4055 Number String(dp)
Problem Description The signature of a permutation is a string that is computed as follows: for each ...
- 【HDU - 4345 】Permutation(DP)
BUPT2017 wintertraining(15) #8F 题意 1到n的排列,经过几次置换(也是一个排列)回到原来的排列,就是循环了. 现在给n(<=1000),求循环周期的所有可能数. ...
- HDU 5375 Gray code(DP)
题意:给一串字符串,里面可能出现0,1,?,当中问号可能为0或1,将这个二进制转换为格雷码后,格雷码的每位有一个权值,当格雷码位取1时.加上该位权值,求最大权值和为多少. 分析:比赛的时候愚了.竟然以 ...
- hdu 1158 Employment Planning(DP)
题意: 有一个工程需要N个月才能完成.(n<=12) 给出雇佣一个工人的费用.每个工人每个月的工资.解雇一个工人的费用. 然后给出N个月所需的最少工人人数. 问完成这个项目最少需要花多少钱. 思 ...
随机推荐
- 由两代WIN8 Surface平板看微软心态
要说win8平板的前景非常好,微软的两代surface做的真不错. 可是可是,微软就错在了把价格定的太高.为什么高,一是intel芯价格不低,二是每套win8和office微软得要价几百美金吧! 这两 ...
- 浅谈BFC与应用
什么是BFC BFC(Block formatting context)的中文翻译我们一般叫做块级格式化上下文.它是一个独立渲染的区域,规定了内部如何布局,同时不受外界的影响.我们的根元素本身就是一个 ...
- ResourceManager架构解析
RM作为master管理着所有的集群资源,它会和NM和特定application的AM共同工作 1. NodeManagers NM从RM中获得指令,并管理着单节点上可用资源 2. Applicati ...
- 【免费】iPhone上最好用的短信群发软件: 高速短信4.1
免费的最新的联系人.群组.多人发送短信软件短信群发4.1已经出炉.欢迎下载! *归属地信息让你时时记着好友的地方,让陌生号码变得不陌生: *您能够选择最经常使用的联系人然后发送高速短信; *群联系人 ...
- spring获取bean 实例
ApplicationContext ctx = new ClassPathXmlApplication("applicationContext.xml"); DataSource ...
- 用VC制作应用程序启动画面
摘 要:本文提供了四种启动画面制作方法. 使用启动画面一是可以减少等待程序加载过程中的枯燥感(尤其是一些大型程序):二是 可以用来显示软件名称和版权等提示信息.怎样使用VC++制作应用程序的启动画面呢 ...
- 在VC下显示JPEG、GIF格式图像的一种简便方法
在VC下显示JPEG.GIF格式图像的一种简便方法 一. 引言 JPEG图像压缩标准随然是一种有损图像压缩标准,但由于人眼视觉的不敏感,经压缩后的画质基本没有发生变化,很快便以较高的压缩率得到了广泛 ...
- 使用ThinkPHP+Uploadify实现图片上传功能
首先,将下载的Uploadify压缩包解压放到公共文件夹内.实现代码如下: 前台html部分: <script src="/uploadify/jquery.min.js" ...
- 线程同步辅助类——Exchanger
下面是java6中文API对Exchanger的解释: 能够在对中对元素进行配对和交换的线程的同步点.每一个线程将条目上的某个方法呈现给 exchange 方法.与伙伴线程进行匹配,而且在返回时接收其 ...
- R语言与数据分析之六:时间序列简介
今年在某服装企业蹲点了4个多月,之间非常长一段时间在探索其现货和期货预測.时间序列也是做销售预測的首选,今天和小伙伴分享下时间序列的基本性质和怎样用R来挖据时间序列的相关属性. 首先读入一个时间序列: ...