2014百度之星预赛(第二场)——Best Financing
2014百度之星预赛(第二场)——Best Financing
限制条件:
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
正确的题意是:
告诉你n个时间点,这些时间点你会得到若干的钱.
然后告诉你m个时间段,以及时间段相应的利率(百分比).
问最后最多能够得到多少钱.
注意事项
首先收益不能用于购买
当天得到钱后当前能够花出去,也就是当天finish的当天可用于购买.
分析
理解题意后,心中会想到这是道DP题.
然后看看每一个时间点得到的钱,貌似他们之间是相互独立的.
实际上看到这个是独立的后。就非常好做了.
对于某个时间点的钱,我们随着时间的向后流动,会遇到一些时间段.
对于遇到的时间段。我们有两个选择:1.买; 2.不买.
买了我们的时间就移动到这个时间段的结束时间,不买了我们的时间移动到下一刻.
最后得到的钱是: 当前钱 * 选择的时间段的利率的和.
建议自己画一个图看看。或者自己心里面想想.
因为我们的目标是是收益最大,也就是是选择的时间段的利率和最大.
这个问题能够轻松的写出状态转移方程:
dp[ i ] = max( dp[i], dp[j] + rate[i, j]);
当中 dp[ i ] 代表 i 时间点到终于时间的路线上最大的利率和, dp[i] 的初始值能够是 dp[i + 1], 即不选择以这个时间点開始的时间段.
rate[i, j] 代表有个从 i 到 j 的时间段,且这个时间段的利率是 rate[i, j].
这样我们从后向前扫描一遍就能够预处理全部时间点到终于时间的最大利率.
然后我们用当前时间的钱 乘以 当前时间的最优利率和就是当前的最大利益.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAX 100005 using namespace std; typedef struct Money
{
int dates;
int earnings;
}Money; typedef struct Earn
{
int start;
int finish;
int rate;
}Earn; bool cmp(const Earn &l,const Earn &r)
{
return l.start<r.start;
} int dp[MAX];
Money money[MAX];
Earn earn[MAX];
int n,m,maxtime;
long long ans; void DP()
{
memset(dp,0,sizeof(dp));
m--;
for(int i=maxtime;i>=0;i--)
{
dp[i]=dp[i+1];
while(m>=0&&i==earn[m].start)
{
dp[i]=max(dp[i],dp[earn[m].finish]+earn[m].rate);
m--;
}
}
} int main(int argc,char *argv[])
{
int t;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
scanf("%d%d",&n,&m);
maxtime=0;
for(int j=0;j<n;j++)
{
scanf("%d%d",&money[j].dates,&money[j].earnings);
maxtime=max(maxtime,money[j].dates);
}
for(int k=0;k<m;k++)
{
scanf("%d%d%d",&earn[k].start,&earn[k].finish,&earn[k].rate);
maxtime=max(maxtime,earn[k].finish);
}
sort(earn,earn+m,cmp);
DP();
ans=0;
for(int j=0;j<n;j++)
ans+=money[j].earnings*dp[money[j].dates];
printf("Case #%d:\n",i);
printf("%I64d.%02I64d\n",ans/100,ans%100);
}
return 0;
}
2014百度之星预赛(第二场)——Best Financing的更多相关文章
- 2014百度之星初赛第二场hdu 4831 Scenic Popularity
Scenic Popularity Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- HDU4828 Grids 2014百度之星预赛问题解决
看看Catalan数的公式:为 Catalan(n) = C(2n, n) / n+1 = C(2n, n) - C(2n, n-1); (公式0) 然后利用全排序表达:Catalan(n) = (2 ...
- 2014百度之星资格赛——Disk Schedule
2014百度拥有明星格比赛--Disk Schedule Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取. 为了提高效率.须要人为安排磁盘读取. 然而.在 ...
- 2014 百度之星 题解 1004 Labyrinth
Problem Description 度度熊是一仅仅喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫仅仅能从矩阵左上角第一个方格開始走,仅仅有走到右上角的第一个格子才算走出迷宫,每一次仅仅能 ...
- 2014 CodingTrip - 携程编程大赛 (预赛第二场)
1001: 食物链(poj1182),直接贴代码,稍作可过 并查集 // // main.cpp // 携程1 // // Created by zhang on 14-4-11. // Copyri ...
- 2014年百度之星资格赛第二题Disk Schedule
Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取.为了提高效率,须要人为安排磁盘读取. 然而,在现实中,这样的做法非常复杂. 我们考虑一个相对简单的场景. ...
- 2014百度之星第二题Disk Schedule(双调欧几里得旅行商问题+DP)
Disk Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- sql注入用<>绕过被过滤的select ——百度杯9月第二场SQL
题目提示SQL注入,打开源代码发现<!--SELECT * FROM info WHERE id=1--> 尝试union select 1,2,3提示inj code! 经过多次尝试之后 ...
- 2014百度之星资格赛—— Xor Sum(01字典树)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ...
随机推荐
- 二、第一个ExtJS程序:helloExtJS
开发前的准备 下载并解压ExtJS包后,能够得到下图的文件文件夹结构: 在实际开发过程中并不须要全部的文件和文件夹,所需的包括例如以下文件夹就可以: 若使用eclipse进行开发,仅仅需将上述文件拷贝 ...
- TypeError: Cannot read property 'style' of null 错误解决
错误信息例如以下: JSP代码例如以下: <c:if test ="${not empty excelErrors}"> <div id="excelE ...
- 百度富文本编辑器UEditor1.3上传图片附件等
今天一直在整我的一个项目的编辑器上传图片,我用的是百度UEditor 1.3版本号的:如今已经有了1.4的了,只是还算比較新吧,可是官网上面没有上传图片这些的教程,而网上对于这方面的资料非常少啊,折腾 ...
- Jersey框架二:Jersey对JSON的支持
Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...
- jquery下php与ajax的数据交换方式
参考链接:http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2013/0122/11971.html 一.前台传递字符串变量,后台返回字符串变量( ...
- linux--档案权限与目录配置
下面是最近学习档案权限与目录配置的一些知识点总结***博客园-邦邦酱好*** Linux最优秀的地方之一,就在于他的多人多任务环境.而为了让各个使用者具有较保密的档案数据,因此档案的权限管理就变的很重 ...
- How to debug with IntelliJ IDEA + Grails 2.3.x (转)
问题: 最近访问grails.org,看到grails framework已经发展到2.3.x了,不免想尝尝鲜.下载了最新的grails-2.3.x之后,创建了一个新的grails app. 添加Bo ...
- html中返回上一页
<a href="<a href="javascript :history.back(-1)">返回上一页</a>或<a href=& ...
- 【原创】最近写的一个比较hack的小爬虫
目标:爬取爱漫画上面自己喜欢的一个漫画 分析阶段: 0.打开爱漫画主页,迎面就是一坨js代码..直接晕了 1.经过抓包和对html源码的分析,可以发现爱漫画通过另外一个域名发送图片,而当前域名中通过j ...
- 从PCI上读取数据 线程和定时器效率
从PCI上读取数据 线程和定时器效率 线程: mythread=AfxBeginThread(StartContinuous,(LPVOID)1,THREAD_PRIORITY_NORMAL,0,CR ...