题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4833

  这道题目关键的思想是从后往前dp,dp[i]表示在第i处投资xi能获得的最大收益,其中xi表示从第i-1到第i处投资之间的收入总和(不包括收益),也就是用xi这些钱从第i处开始投资到最后靠xi这些钱获得的最大收益。那么获得的总收益就是dp[0] * x0 + dp[1] * x1 + ... + dp[n] * xn。另一个关键思想就是对理财产品的起始和结束时间进行离散化,这样能够节约空间和dp的时间。

 #include <stdio.h>
#include <vector>
#include <map>
#include <string.h>
#include <algorithm>
using namespace std; int dates[], ls[ * ], jg[ * ];
long long dp[ * ], ans;
struct Product
{
int start, finish, rate;
}product[];
map<int, int> myMap;
vector<int> vec1[ * ], vec2[ * ]; #define max(a, b) ((a) > (b) ? (a) : (b)) int main(void)
{
int n, m, t, i, j, k, date, earning, cnt, maxDate; scanf("%d", &t);
for (i = ; i <= t; i++)
{
scanf("%d%d", &n, &m);
memset(dates, , sizeof(dates));
maxDate = ;
for (j = ; j < n; j++)
{
scanf("%d%d", &date, &earning);
dates[date] += earning;
if (date > maxDate)
maxDate = date;
}
for (j = ; j < m; j++)
{
scanf("%d%d%d", &product[j].start, &product[j].finish, &product[j].rate);
ls[j] = product[j].start;
ls[j + m] = product[j].finish;
if (product[j].finish > maxDate)
maxDate = product[j].finish;
}
for (j = ; j <= maxDate; j++)
dates[j] += dates[j - ];
sort(ls, ls + m + m, less<int>());
cnt = unique(ls, ls + m + m) - ls;
jg[] = dates[ls[]];
myMap.clear();
for (j = ; j < cnt; j++)
{
myMap[ls[j]] = j;
jg[j] = dates[ls[j]] - dates[ls[j - ]];
vec1[j].clear();
vec2[j].clear();
}
for (j = ; j < m; j++)
{
vec1[myMap[product[j].start]].push_back(myMap[product[j].finish]);
vec2[myMap[product[j].start]].push_back(product[j].rate);
}
memset(dp, , sizeof(dp));
for (j = cnt - ; j >= ; j--)
{
dp[j] = dp[j + ];
for (k = ; k < vec1[j].size(); k++)
dp[j] = max(dp[j], dp[vec1[j][k]] + vec2[j][k]);
}
ans = ;
for (j = ; j < cnt; j++)
ans += dp[j] * jg[j];
printf("Case #%d:\n%.2lf\n", i, (double)ans / 100.0);
}
return ;
}

hdu4833 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. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  4. lightOJ 1047 Neighbor House (DP)

    lightOJ 1047   Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...

  5. UVA11125 - Arrange Some Marbles(dp)

    UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...

  6. 【POJ 3071】 Football(DP)

    [POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted ...

  7. 初探动态规划(DP)

    学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...

  8. Tour(dp)

    Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...

  9. 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)

    .navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...

随机推荐

  1. Redis集群最佳实践

    今天我们来聊一聊Redis集群.先看看集群的特点,我对它的理解是要需要同时满足高可用性以及可扩展性,即任何时候对外的接口都要是基本可用的并具备一定的灾备能力,同时节点的数量能够根据业务量级的大小动态的 ...

  2. 初次接触nodejs,请多指教。

    一  安装nodejs 1.下载node.js.在http://nodejs.org/download/下载最新版的node.exe文件,我下载时是v0.10.33.下载完成后,在F盘新建nodejs ...

  3. centos 6.5 升级内核 linux 3.12.17 (笔记 实测)

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G) 系统版本:Linux centos 2.6.32-431.el6.x86_64(Centos-6.5-x86_64-mi ...

  4. .NET C#-- 利用BeginInvoke与EndInvoke完成异步委托方法并获取方法执行返回值示例

    //定义委托 delegate string MyDelegate(string name); //定义委托调用函数 public string Hello(string name) { Thread ...

  5. 网站iis日志分析工具

    1.下载log parser https://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=24659 2.进 ...

  6. mysql之触发器trigger

    触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...

  7. 最近在新公司的一些HTML学习

    还是先把代码贴在这  后期再写感想 <!DOCTYPE html> <head> <meta http-equiv="x-ua-compatible" ...

  8. Mysql 行列转换

    一.第一种 原数据表 转换后 DROP TABLE IF EXISTS tempdynamic; CREATE TEMPORARY TABLE tempdynamic ( SELECT p.fsPay ...

  9. IOS远程推送

    IOS远程推送 一.关于推送通知 推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能.是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的.一般说 ...

  10. ASP.NET Core 数据保护(Data Protection)【中】

    前言 上篇主要是对 ASP.NET Core 的 Data Protection 做了一个简单的介绍,本篇主要是介绍一下API及使用方法. API 接口 ASP.NET Core Data Prote ...