题目链接: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. 解决弹出的窗口window.open会被浏览器阻止的问题

    问题现象 最近在做项目的时候碰到了使用window.open被浏览器拦截的情况,有时候会一直连接,有时候会偶尔拦截, 尝试了很多方法,走了很多弯路,总结一下结果分享大家 原因分析&深入研究 1 ...

  2. javascript的变量声明提升

    这篇随笔是对网上文章的整理吸收 1. javascript的作用域是函数,不是块 2. 在函数内部,javascript解释器会把var变量提升到当前域的最前面,但是函数体不会提升. 看下面例子: v ...

  3. Python模块之常用模块,反射以及正则表达式

    常用模块  1. OS模块 用于提供系统级别的操作,系统目录,文件,路径,环境变量等 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("di ...

  4. jQuery代码节选(事件)

    事件 1.ready()$(document).ready(function() { //代码});简写:$(function( { //代码});该事件是会在页面加载完后执行,相当于onloca() ...

  5. mysql 数据表中查找重复记录

    select mobile_phone,count(*) as count from lawyer group by mobile_phone having count>1;

  6. Metaio获取当前追踪的对象的方法

    重写 onTrackingEvent获取TrackingValues集合,然后通过TrackingValues的state属性的isTrackingState()方法判断是否为追踪状态,或者直接使用s ...

  7. Autocad 2012 win7(64位)启动时一直卡在acmgd.dll处的解决方案

    安装Autocad 2012后,激活成功后,无法正常启动,一直卡在加载acmgd.dll 通过Procmon监控后发现加载C:\Windows\fonts\AdobeFnt11.lst处出错, 通过命 ...

  8. 关于shiro

    1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Securi ...

  9. dom初识

    1什么是dom document object model文档对象模型 是将整个页面文档封装成了一个对象,就是一个文档对象 整个页面就是一个文档,是由很多的节点组成的节点又包括三部分: 元素 属性 文 ...

  10. 混搭.NET技术

    新闻 .NET技术+25台服务器怎样支撑世界第54大网站 再度燃起人们对.NET的技术热情.这篇新闻中透露了StackExchange 在技术方面的混搭,这也是我所崇尚的.因此我也在社区里极力推广Mo ...