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个月所需的最少工人人数. 问完成这个项目最少需要花多少钱. 思 ...
随机推荐
- QString ini ;转义符
ini如果value字符串中存在:,通过双引号即可转义 [a] b=sdc";"gf
- prevPage / nextPage in jQuery Mobile | George Nixon's Blog
prevPage / nextPage in jQuery Mobile | George Nixon's Blog ui.prevPage[0].id I finally worked this o ...
- cocos2dx3.2 异步载入和动态载入
半个月没有更新博客,从这个项目開始学习了非常多细节的东西,都不太成系统.可是却是开发上线中必须经历的东西.比方超级玛丽系列(一)中的正确的异步载入,正确的分层.正确的合成和载入plist.及时的移除未 ...
- Swift - 给表格UITableView添加索引功能(快速定位)
像iOS中的通讯录,通过点击联系人表格右侧的字母索引,我们可以快速定位到以该字母为首字母的联系人分组. 要实现索引,我们只需要两步操作: (1)实现索引数据源代理方法 (2)响应点击索引触发的代理 ...
- Eclipse设置Android Logcat输出字体大小
Window -> Preferences -> Android -> Logcat -> Display Font:点击"Change"button 如图 ...
- EL表达式(1)
JSP页面中支持使用EL表达式,EL全名为Expression Language.EL表达式的主要作用有: ① 获取数据: ② 执行运算: ③ 使用EL表达式的11大隐式对象: ④ 调用Java方法. ...
- Vanya and Lanterns
Description Vanya walks late at night along a straight street of length l, lit by n lanterns. Consid ...
- fzu 1909 An Equation(水题)
题目链接:fzu 1909 An Equation 典型的签到题. #include <stdio.h> #include <string.h> bool judge(int ...
- Monkey 命令使用说明
1. 命令使用 Monkey是一个命令列工具 ,可以运行在仿真器里或实际设备中.它向系统发送伪随机的使用者事件流,实现对正在开发的应用程序进行压力测试.Monkey包括许多选项,它们大致分为四大类: ...
- zabbix 监控jmx 需要--enable-java
安装Javagateway如果原来已经安装zabbix,只需要再添加以下zabbix-java # tar zxvf zabbix-2.2.0.tar.gz # cd zabbix-2.2.0 # . ...