题目链接: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. CSS 一些知识点

  2. redis的面试题,没答出来,直接被pass

    redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略.redis 提供 6种数据淘汰策略:  volatile-lru:从已设置过期时间的数据集(server.db[i].expire ...

  3. MySQL表名和数据库关键字相同解决办法

    今天改他们的代码的时候,遇到了MySQL表名和数据库关键字的问题. 由于表名是关键字,导致增删改查都报错. Hibernate: select leave0_.id as id22_, leave0_ ...

  4. Ncut源码编译错误的解决方法

    NCut是一个比较老的开源代码了.所以在新的matlab的环境下老出各种bug. 经过自己的各种折腾,总结为一下几点: 1.保证matlab的mex是有C编译器可以用的,具体可以用 mex -setu ...

  5. USER STORIES AND USE CASES - DON’T USE BOTH

    We’re in Orlando for a working session as part of the Core Team building BABOK V3 and over dinner th ...

  6. 基于webdriver的jmeter性能测试-通过jmeter实现jar录制脚本的性能测试

    续接--基于webdriver的jmeter性能测试-Eclipse+Selenium+JUnit生成jar包 在进行测试前先将用于支持selenium录制脚本运行所需的类包jar文件放到jmeter ...

  7. cocoapods安装出错问题

    今天执行pod install时,出现了错误,提示更新,好,那就更新; 1.终端执行了下:gem sources -l   查看了下源 *** CURRENT SOURCES *** https:// ...

  8. 对session的理解

    java Servlet API引入session 机制来跟踪客户的状态,session指的是在一段时间内,单个客户和web服务器之间一连串的交互过程,在一个session中,一个客户可能会多次请求同 ...

  9. Ubuntu安装Gnome3

    参考:How To Install GNOME In Ubuntu 14.04 . Ubuntu11.10安装GNOME3,卸载UNITY和UNITY2D操作 和How to install Gnom ...

  10. Nova PhoneGap框架 第五章 文件结构

    一个好的项目架构必然有着合理的文件结构,如果一个项目的文件组织混乱,那么可以断言一定是项目架构有问题. 合理的文件结构能够帮你更清晰的管理你的文件,并且当需要添加新的文件的时候,你的程序员很清楚应该加 ...