[NOIP]玩具装箱
题目:(非常经典的模拟赛题,适合动规入门的OIer)
简要分析:
动态规划,用一维数组 f[i] 表示从位置1 到 位置i 的最优花费 ,由于 f[i ] 以前的最优花费都是确定的,故只需要在 1 to i 中 枚举变量 j 用来分段.即 把 Q[1 , i ]分为了 Q[1 , j ] + Q[ j+1 , i].其中Q[ 1 , j ]已经被算出,而 Q[ j+1 , i ]又能很轻易的由题目所给公式得到,状态转移方程 f[ i ] = min { f[j-1] + k + ( i-j+1 )*(max[i,j]-min[i,j]) | i-j>m ,j >=1,j<=i }.
代码实现:
1.朴素动规,即老老实实的 把 max[i,j] 和 min[i,j]给预处理出来,可能会爆内存,不能得全分,但建议阅读:
namespace last { //笼统预处理版本 << ; int n, k, m; long long a[(int)4e4]; ][(], fmin[(][(]; long long f[(int)4e4]; int main() { cin >> n >> m >> k; ; i <= n; i++) cin >> a[i], f[i] = i * k; ; i <= n; i++) { //预处理出区间极值 fmax[i][i] = fmin[i][i] = a[i]; ; j <= n; j++) { fmax[i][j] = max(fmax[i][j - ], a[j]); fmin[i][j] = min(fmin[i][j - ], a[j]); } } f[] = k; //初始化 ; i <= n; i++) { f[i]=1e+; , ); j <= i; j++) //简单的状态转移 f[i] = min(f[i], f[j - ] + k + (i - j + ) * (fmax[j][i] - fmin[j][i])); } cout << f[n] << endl; //system("pause"); ; } }
2.在状态转移时求出当前 max,min,为了使max,min适用于 Q[ j , i ],因此枚举 j 时采用倒序:
namespace newn { //更巧妙的方法 int a[maxn], n, m, k; lnt f[maxn]; int main() { scanf("%d%d%d", &n, &m, &k); ; i <= n; i++) scanf("%d", &a[i]); ; i <= n; i++) { f[i] = 1e18; , mn = 1e9; //可以边走边算最值,不用预处理,但需要逆序 ; j--) { if (a[j] < mn) mn = a[j]; if (a[j] > mx) mx = a[j]; f[i] = min(f[i], f[j - ] + k + 1ll * (mx - mn) * (i - j + )); } } printf("%lld\n", f[n]); //system("pause"); } }
3.最后给出主函数(其实没必要的)
int main() { /**/ freopen("toy.in", "r", stdin); freopen("toy.out", "w", stdout); /**/ last::main(); newn::main(); ; }
4.总结一下,动规也是非常有技巧性的
[NOIP]玩具装箱的更多相关文章
- BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9812 Solved: 3978[Submit][St ...
- 【BZOJ-1010】玩具装箱toy DP + 斜率优化
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 8432 Solved: 3338[Submit][St ...
- C++之路进阶——codevs1319(玩具装箱)
1319 玩具装箱 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description P教授要去看奥运,但是他舍不下他的玩具,于是 ...
- BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP
1010: [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再 ...
- 【BZOJ】【1010】【HNOI2008】玩具装箱Toy
DP/斜率优化 根据题目描述很容易列出动规方程:$$ f[i]=min\{ f[j]+(s[i]-s[j]+i-j-1-L)^2 \}$$ 其中 $$s[i]=\sum_{k=1}^{i} c[k] ...
- 【bzoj1010】[HNOI2008]玩具装箱toy
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9281 Solved: 3719[Submit][St ...
- 【斜率DP】BZOJ 1010:玩具装箱
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 7537 Solved: 2888[Submit][St ...
- BZOJ_1010_[HNOI2008]_玩具装箱toy_(斜率优化动态规划+单调队列)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1010 给出\(n\)和\(l\).有\(n\)个玩具,第\(i\)个玩具的长度是\(c[i]\ ...
- 【BZOJ 1010】 [HNOI2008]玩具装箱toy (斜率优化)
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9330 Solved: 3739 Descriptio ...
随机推荐
- Java继承--覆盖
java中支持单继承.不直接支持多继承,但对C++中的多继承机制进行改良. 单继承:一个子类只能有一个直接父类. 多继承:一个子类可以有多个直接父类(java中不允许,进行改良).不直接支持,因为多个 ...
- win10 uwp 设置启动窗口大小 获取窗口大小
本文主要说如何设置我们窗口的启动大小,UWP启动窗口大小. 设置启动窗口 设置窗口大小 ApplicationView.PreferredLaunchViewSize = new Size(1000, ...
- Spring装配Bean之Java代码装配bean
尽管通过组件扫描和自动装配实现Spring的自动化配置很方便也推荐,但是有时候自动配置的方式实现不了,就需要明确显示的配置Spring.比如说,想要将第三方库中的组件装配到自己的应用中,这样的情况下, ...
- Nginx-OpenResty安装配置
上两篇中介绍了: Ngnix技术研究系列1-通过应用场景看Nginx的反向代理 Ngnix技术研究系列2-基于Redis实现动态路由 发现,应该加一篇OpenResty的安装部署说明,方便大家按图索骥 ...
- MYSQL 子查询返回多列显示
因工作需要,目前研究出一种mysql 技能,与大家分享一下. 需求:关联查询另一个大表数据的某些(一个以上)字段 方案:因关联查询的表数据太大.多表查询影响效率,单个子查询又有些多余.所以采用多列拼接 ...
- 06-从零玩转JavaWeb-数组在内存当中的存放形式
一.JVM的内存划分 想要了解数组的内存存储,先要了解JVM的整体内存划分,详细参见第04JVM内存详解 二.数组在JVM当中的存储详解 假如我们有如下代码: 上面代码当中,创建数组的过程我们可以把 ...
- web service实例
一.准备工作(以下为本实例使用工具) 1.MyEclipse10.7.1 2.JDK 1.6.0_22 二.创建服务端 1.创建[Web Service Project],命名为[TheService ...
- TCP协议解析
本文摘抄自:http://www.kuqin.com/shuoit/20141018/342719.html 本文描述了TCP协议,首先简单介绍了TCP完成了一些什么功能:介绍了TCP报文格式,以及典 ...
- The Balance
The Balance Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- SSH框架整合--applicationContext.xml文件配置实例
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...