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个月所需的最少工人人数. 问完成这个项目最少需要花多少钱. 思 ...
随机推荐
- Java与C#的语法区别(不断更新中...)
1.static关键字: 在java中静态成员能够被对象和类名调用: 在C#中,静态成员只能被类调用不能被对象调用. 2.for循环: 在java中可以在for前面添加标记,然后在for循环中可以br ...
- CLR和.Net对象
CLR和.Net对象生存周期 前言 1. 基础概念明晰* 1.1 公告语言运行时* 1.2 托管模块* 1.3 对象和类型* 1.4 垃圾回收器 2. 垃圾回收模型* 2.1 为什么需要垃圾回收* 2 ...
- 内部框架——axure线框图部件库介绍
网页框架代码<iframe border=0 name=lantk src="要嵌入的网页地址" width=400 height=400 allowTransparency ...
- VC++笔记七
动态链接库修改文件名问题? eg:GetRadarFS.dll->RadarModel.dll; 注意修改:打开文件GetRadarFs.def 修改 LIBRARY "GetRad ...
- python httpConnection详解
模块urllib,urllib2,httplib的区别 httplib实现了http和https的客户端协议,但是在python中,模块urllib和urllib2对httplib进行了更上层的封装. ...
- Android API中被忽略的几个函数接口
1. MotionEvent的几个函数 下面的方法都支持多点触摸,即可以对单个触摸点调用下面的方法 1.1 getPressure() 这个api 可以获取到手指触摸屏幕时候的压力,但是需要硬件和驱动 ...
- 关于ListCtrol自绘的技巧
一.给控件添加排序功能report风格的list控件很多情况下都需要支持排序功能,而且最好支持按不同列进行排序.CListCtrl的类方法SortItems支持排序功能,但是在排序过程中,两个数据真正 ...
- win32用GDI+加载png图片作为背景图
#include <windows.h> #include <gdiplus.h> /* GDI+ startup token */ ULONG_PTR gdiplusStar ...
- 系统没有“internet信息服务(IIS)管理器”
系统没有“internet信息服务(IIS)管理器” | 浏览:8981 | 更新:2014-06-19 14:43 1 2 3 4 5 6 7 分步阅读 很多用户都在咨询:系统控制面板的管理工具中没 ...
- [C#基础] 继承
虚方法和覆写方法 虚方法可以使基类的引用访问"升至"派生类中 可以使用基类引用调用派生类的方法,只需满足下面的条件 派生类的方法和基类的方法有相同的签名和返回类型 基类的方法使用v ...