caioj 1063 动态规划入门(一维一边推1:美元和马克)
2024-08-31 15:23:42
这道题一开始我是这么想的
最后的答案肯定是某次的马克换回来的,但这个该怎么确定??
实际上应该把范围缩小,只看最后一次和倒数第二次之间有什么联系。
可以发现,只有两种可能,最后一天换或者不换。换的话就要求出
最后一天之前最多的马克,不换的话就是最后一天前最多的美元。
设d[i]为前i次最多的美元,m[i]为前i次最多的马克,x为今天换的值
那么可以得到
d[i] = max(d[i-1], m[i-1] * 100 / x)
m[i] = max(m[i-1], d[i-1] * x / 100)
最后d[n]就是答案
大致步骤
先尝试设立状态
然后判断当前状态可以由哪些状态推来,写转移方程
写出答案和起始条件
#include<cstdio>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std;
const int MAXN = 112;
double d[MAXN], m[MAXN];
int n;
int main()
{
double x;
scanf("%d%lf", &n, &x);
d[0] = 100;
m[0] = x;
REP(i, 1, n)
{
scanf("%lf", &x);
d[i] = max(d[i-1], m[i-1] * 100 / x);
m[i] = max(m[i-1], d[i-1] * x / 100);
}
printf("%.2lf\n", d[n-1]);
return 0;
}
最新文章
- javascript 数字格式化
- RSA原理及生成步骤
- 【VLC-Android】LibVLC API简介(相当于VLC的MediaPlayer)
- 关于 redis、memcache、mongoDB 的对比(转载)
- vc++ basic chapt1
- db2删除数据库
- My Rules of Information
- Configuring My Site in SharePoint 2010
- Code for the Homework1
- CentOS7 列出服务和对应端口
- java strtus2 DynamicMethodInvocation配置入门 "; ! ";访问action里面的方法
- Listview多条目展示
- 状态开关按钮(ToggleButton)与开关(Switch)的功能与用法
- POJ1845-Sumdiv大数约数和
- Codeforces Round #434 (Div. 2, based on Technocup 2018 Elimination Round 1)&;&;Codeforces 861B Which floor?【枚举,暴力】
- Linux find用法
- python(函数)
- 稀疏贴图 SparseTexture
- 抗性基因数据库CARD介绍
- HeadFIrst Ruby 第二章总结 methods and classes
热门文章
- [MST] Use Volatile State and Lifecycle Methods to Manage Private State
- 一:Java之面向对象基本概念
- UVA 11825 - Hackers&;#39; Crackdown 状态压缩 dp 枚举子集
- mysql-过程与函数
- hdoj 1719 Friend
- 基于IBM Bluemix的数据缓存应用实例
- OCP-1Z0-051-题目解析-第50题
- 设计url 通过分发的方式 Xadmin_demo
- js 实现 水仙花数
- PostgreSQL Replication之第九章 与pgpool一起工作(5)