[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 ...
随机推荐
- 【JDK1.8】Java 8源码阅读汇总
一.前言 万丈高楼平地起,相信要想学好java,仅仅掌握基础的语法是远远不够的,从今天起,笔者将和园友们一起阅读jdk1.8的源码,并将阅读重点放在常见的诸如collection集合以及concu ...
- uva242,Stamps and Envelope Size
这题紫薯上翻译错了 应该是:如果有多个并列,输出邮票种类最少的那个,如果还有并列,输出最大面值最小的那个 坑了我一个下午 dp[p][q]==1表示可以用不超过q张组成面额p 结合记忆化,p从1开始枚 ...
- 聊聊Vue.js组件间通信的几种姿势
写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出. 文章的原地址:https://github.com/a ...
- 牛顿插值法及其C++实现
h1 { margin-bottom: 0.21cm } h1.western { font-family: "Liberation Sans", sans-serif; font ...
- vs2012建一个空解决方案添加以前老版本的Web项目调试弹出window安全
解决方法:NTLM身份验证去掉就行.
- 企业微信开发之向员工付款(C#)
一.企业微信API 地址:http://work.weixin.qq.com/api/doc#11545 二.参数说明 1.向员工付款 请求方式:POST(HTTPS)请求地址:https://api ...
- C++指针的用法
在学习C++或者是C语言时难免会动态分配内存,这时你便要使用到指针.这里以C++为例,讲一下使用指针的注意事项: 比如说,Dog dog = new Dog(),这么一句语句系统就会为你分配内存.当然 ...
- VPS搭建离线下载服务器——后网盘时代
动机 由于学习的需要,在国外某服务器厂商购买了vps服务(至于是哪个厂商就不说啦).但是呢,就算用作梯子,一个月1T的流量总是用不完.最经觉得自己营养充足,想找点电影看看. 无奈现在百度网盘的速度真的 ...
- iOS 输入时键盘处理问题
最正规的办法,用通知 step 1:在进入视图的时候添加监视:(viewDidLoad什么的) //监听键盘的通知 [[NSNotificationCenter defaultCenter] addO ...
- LINUX环境下SVN安装与配置(利用钩子同步开发环境与测试环境)
安装采用YUM一键安装: 1.环境Centos 6.6 2.安装svnyum -y install subversion 3.配置 建立版本库目录mkdir /www/svndata svnserve ...