hdu4833 Best Financing(DP)
题目链接: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)的更多相关文章
- 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) ...
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- 初探动态规划(DP)
学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...
- Tour(dp)
Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
.navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...
随机推荐
- Cloud Engine:大杀器如何炼成
郑昀(微博:http://weibo.com/yunzheng) 创建于2016/6/18 最后更新于2016/6/19 点击查看我的<如何从零搭建一个技术平台>,这是一个系列.转载时请注 ...
- Ubuntu创建桌面快捷方式
默认情况下,ubuntu会将自动安装的软件快捷方式保存在/usr/share/applications目录下,如果我们要创建桌面快捷方式,只需要右键-复制-桌面 就Ok,如图: 上面的方法是通过系统自 ...
- Java中9种IO的读取方式
数据的读写,按照数据类型可以分为两种:字符流和字节流(二者区别?).所以数据读取方式按照数据类型也可以分为两类:字节流的读取和字符流的读取. 一.字节流读取操作: | | |-----1.FileI ...
- [LintCode] Trapping Rain Water 收集雨水
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- SMA、SMB、SMC封装的二极管
以常见的贴片肖特基二极管SS14 SS24 SS34为例,三种管子区别主要在电流上,有三种封装:SMA.SMB.SMC. 从成本和体积来说,优先选用最小尺寸的SMA/DO-214AC封装,其他封装一般 ...
- 页面制作部分之PS切图
页面制作部分之PS切图 <--本标签下,通过页面制作.页面架构.javascript程序设计.DOM编程艺术.产品前端架构五部分来分享总结笔记,总结笔记会陆续分享--> 网页设计在技术层面 ...
- Html5选择本地视频音频文件播放
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- perl 删除过期文件
#!/usr/bin/perl `find /bak/ >list.txt`; open LIST,"/root/list.txt"; while (<LIST> ...
- APP漏洞扫描器之本地拒绝服务检测详解
APP漏洞扫描器之本地拒绝服务检测详解 阿里聚安全的Android应用漏洞扫描器有一个检测项是本地拒绝服务漏洞的检测,采用的是静态分析加动态模糊测试的方法来检测,检测结果准确全面.本文将讲一下应用漏洞 ...
- 【腾讯Bugly干货分享】微信小程序开发思考总结——腾讯“信用卡还款”项目实践
本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/58212d0fa7a7574c4f4cc3c5 作者:peggy 小程序概述 1 ...