题目:(非常经典的模拟赛题,适合动规入门的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]玩具装箱的更多相关文章

  1. BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9812  Solved: 3978[Submit][St ...

  2. 【BZOJ-1010】玩具装箱toy DP + 斜率优化

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 8432  Solved: 3338[Submit][St ...

  3. C++之路进阶——codevs1319(玩具装箱)

    1319 玩具装箱  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description P教授要去看奥运,但是他舍不下他的玩具,于是 ...

  4. BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP

    1010: [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再 ...

  5. 【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] ...

  6. 【bzoj1010】[HNOI2008]玩具装箱toy

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9281  Solved: 3719[Submit][St ...

  7. 【斜率DP】BZOJ 1010:玩具装箱

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 7537  Solved: 2888[Submit][St ...

  8. BZOJ_1010_[HNOI2008]_玩具装箱toy_(斜率优化动态规划+单调队列)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1010 给出\(n\)和\(l\).有\(n\)个玩具,第\(i\)个玩具的长度是\(c[i]\ ...

  9. 【BZOJ 1010】 [HNOI2008]玩具装箱toy (斜率优化)

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9330  Solved: 3739 Descriptio ...

随机推荐

  1. ajax请求service报405错误 - 【服务器不允许的方法】

    产生原因:web服务器找不到service方法处理请求. 检查方向: ① service方法名称写错 ② service方法参数类型与标准不一致 ③ service方法异常,返回值类型和标准不一致 ④ ...

  2. MVC.NET 发布后,部署到iis ,网站中的Bootstrap的字体图标不能正常显示

    时隔多日没有在博客中记录自己遇到的问题及解决方案了 ,今天给大家分享一个可能会遇到的一个鸡肋bug ! 如果你的项目是MVC并且在项目中引用了 Boostrap 框架,你在编辑发布后部署到iis的时候 ...

  3. 声明数组变量/// 计算所有元素的总和/打印所有元素总和/输出/foreach循环/数组作为函数的参数/调用printArray方法打印

    实例 下面是这两种语法的代码示例: double[] myList; // 首选的方法 或 double myList[]; // 效果相同,但不是首选方法 创建数组 Java语言使用new操作符来创 ...

  4. 虚拟机VMware-workstation-full-12.5.2安装注册方法(附安装包下载链接)

    首先,需要下载好虚拟机的安装包: 链接:http://pan.baidu.com/s/1mix3fFa 密码:6ftu 下载好后,双击安装程序,弹出安装界面,然后按照红色圈圈的指示进行安装操作,完成安 ...

  5. ArcGIS二次开发AO软件安装破解教程

    最近在做ArcGIS二次开发时,采用C#中的WPF技术,在调研中发现ArcGIS 10.3及以上版本支持WPF技术,但是关于ArcGIS10.3的破解教程甚少,自己尝试了不少方法都失败了,淘@宝@商家 ...

  6. 【NOIP2015提高组】Day2 T1 跳石头

    题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩石(不含起点和终 点的岩石).在比赛过程中,选手们将从 ...

  7. C#学习笔记-观察者模式

    题目1:几个同事为了在上班期间偷偷看休息,做点其他的事情,就和小秘偷偷联系了一下,如果老板回来了,就麻烦小秘偷偷通知一声,这样方便大家及时变更自己的工作状态. 分析: 根据题目分析,首先明确,肯定会有 ...

  8. 获取Django项目的全部url

    在为一个项目添加权限时,遇到一个问题,就是为项目所有的url设置权限,但是一个一个手动输入太麻烦了,所以考虑用代码获取到一个项目所有的url 首先,考虑到项目最外层的urlpartterns,因为所有 ...

  9. javascript 之异常处理try catch finally--05

    语法结构 try catch finally是ECMAScript-262 第三版提供异常处理机制的标准,语法结构如下: try{ //可能会发生的错误代码 } catch(error){ //错误处 ...

  10. mybatis返回int类型报null

    解决这个问题,是当查出来为NULL时,结一个默认值,如:0. MySQL: SELECT IFNULL(MAX(id),0)AS sort FROM table Oracle: SELECT nvl( ...