企鹅的游戏(penguin)

题目描述

Shiva养了一只小企鹅。小企鹅很聪明,她总是帮Shiva和他的好朋友想出很多很好玩的游 戏。其中有一个游戏特别经典,Shiva和他的小伙伴们百玩不厌。 游戏规则如下: 先给出2个正整数序列A1、A2,序列长度分别为L1,L2 (1 ≤ L1, L2 ≤ 5000)。你可以 做如下移动:移去第一个序列的最后P1 (P1≥1) 个数(可以是整个序列)并得到它们的和 S1,同时移去第二个序列的最后P2 (P2≥1)个数(可以是整个序列)并得到它们的和S2。 那么这次移动的费用为 (P1-S1)*(P2-S2)。你可以继续游戏直到两个序列为空,所以不允许一个数列空了,而另一个数列中还有数。而这次游戏 的费用就为每次移动费用的和。 你现在的目标是使这次游戏的费用最小。 注意:序列能为空当且仅当两个序列同时为空。

输入

第一行两个正整数L1,L2分别表示两个序列的长度; 第二行L1个正整数,描述序列A1[1..L1],第i个正整数为A1[i] 第三行L2个正整数,描述序列A2[1..L2],第i个正整数为A2[i] 除L1,L2外,所有的整数均不超过1000。

输出

一个正整数表示该次游戏的最小费用

样例输入

3 2
1 2 3
1 2

样例输出

2

提示

对于30%数据,1<=L1,L2<=50

对于60%数据,1<=L1,L2<=500

对于100%数据,1<=L1,L2<=5000


solution

可以发现每次操作k1或者k2一定有一个等于1

(直观的想多个乘一起一定不优)

效率O(n^3)

有个技巧 把a[i]--;

f[i][j]=min(f[i][j],f[i-1][j]+a[i]*b[j]);
f[i][j]=min(f[i][j],f[i][j-1]+a[i]*b[j]);
f[i][j]=min(f[i][j],f[i-1][j-1]+a[i]*b[j]);

为什么这样可以呢

假设代价是a*(b+c)

我们可以理解为a*b+a*c

那就相当于b时留着a不删去c时再删去

include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 2005
using namespace std;
int n,m,f[maxn][maxn],a[maxn],b[maxn];
int main()
{
cin>>n>>m;
for(int i=0;i<=n;i++)
for(int j=0;j<=m;j++)f[i][j]=1e9;
for(int i=n;i>=1;i--){scanf("%d",&a[i]);a[i]--;}
for(int i=m;i>=1;i--){scanf("%d",&b[i]);b[i]--;}
f[0][0]=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
f[i][j]=min(f[i][j],f[i-1][j]+a[i]*b[j]);
f[i][j]=min(f[i][j],f[i][j-1]+a[i]*b[j]);
f[i][j]=min(f[i][j],f[i-1][j-1]+a[i]*b[j]);
}
}
cout<<f[n][m]<<endl;
return 0;
}

企鹅的游戏(penguin)的更多相关文章

  1. iOS动画效果合集、飞吧企鹅游戏、换肤方案、画板、文字效果等源码

    iOS精选源码 动画知识运用及常见动画效果收集 3D卡片拖拽卡片叠加卡片 iFIERO - FLYING PENGUIN 飞吧企鹅SpriteKit游戏(源码) Swift封装的空数据提醒界面Empt ...

  2. FC红白机游戏列表(维基百科)

    1055个fc游戏列表 日文名 中文译名 英文版名 发行日期 发行商 ドンキーコング 大金刚 Donkey Kong 1983年7月15日 任天堂 ドンキーコングJR. 大金刚Jr. Donkey K ...

  3. 玩家福音:10款最佳Linux免费游戏

    “我能在Linux平台上游戏吗?”这类疑问正困扰游戏玩家,那么答案就是“快去Linux平台吧!”.开源组织一直以来坚持不懈为Linux操作系统开发不同类型的游戏,在Linux平台下的游戏完全不亚于其他 ...

  4. 开源玩家福利:十大Linux免费游戏

    假如当你考虑从Windows平台迁移至Linux平台时,“我能在Linux平台上游戏吗?”这类疑问正困扰着你,那么对此这有一个答案就是“快去Linux平台吧!”.感谢开源组织一直以来坚持不懈为Linu ...

  5. Java的集合框架

    01.为什么要使用集合框架? 解析:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,那么可以使用Java集合框架. 如果启用集合的删除方法,那么集合中所有元素的索引会自动维护. 集合 ...

  6. windows程序防狼术入门

    当初由于一些原因以及兴趣,学习了一段时间软件逆向,对于软件加密解密有了点粗略的了解.而后看到某些同学辛辛苦苦的搞出个软件,自己费心费力去加密,但搞出来后往往能被秒破,实不忍心.今天大概总结下一些基本的 ...

  7. Java学习笔记——封装、继承和多态

    先说说封装: 用new 一条狗来举个例子: public class Dog { //私有化字段 private String name; private int age; //无参构造 Dog(){ ...

  8. java的方法重写 ,多态和关键字 instanceof和final

    package cn.pen; /*final 是一个java的关键字,用于修饰局部变量.属性.方法.类,表示最终的意思. final修饰类表示最终类,无法被继承.public final class ...

  9. Java面向对象的三大特性之一 多态

    多态: 子类重写父类方法 1)位置:子类和父类中有同名的方法 2)方法名相同,返回类型和修饰符相同,参数列表相同       方法体不同 多态的优势和应用场合 多态:同一个引用类型,使用不同的实例而执 ...

随机推荐

  1. C# 运用StreamReader类和StreamWriter类实现文件的读写操作

    对文件的读写操作应该是最重要的文件操作,System.IO命名空间为我们提供了诸多文件读写操作类,在这里我要向大家介绍最常用也是最基本的StreamReader类和StreamWriter类.从这两个 ...

  2. C#装箱与拆箱的研究

    在对这个问题展开讨论之前,我们不妨先来问这么几个问题,以系统的了解我们今天要探究的主题. 观者也许曾无数次的使用过诸如System.Console类或.NET类库中那些品种繁多的类.那么,我想问的是它 ...

  3. vue使用animate.css类库实现动画

    首先安装animate.css类库 cnpm install animate.css –save 然后在vue的script文件中引用 import $ from '../assets/js/jque ...

  4. (转)国内外优秀的Web前端工程师

    1. 国内外优秀的Web前端工程师 寻找Github.微博.知乎等技术社区上比较活跃.影响力大的圈内大神,供大家膜拜! 视野所限,未必全面,欢迎大家推荐.自荐. 排名不分先后,序号只为标记方便. 提供 ...

  5. 【转】C++ 值传递、指针传递、引用传递详解

    而关于值传递,指针传递,引用传递这几个方面还会存在误区, 所有我觉的有必要在这里也说明一下~ 下文会通过例子详细说明哦 值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值.从被调用函数的角 ...

  6. session 关于localhost和本地IP地址 不共享问题

    打比方,  一个请求 localhost:8080/test/test  ,一个本地Ip(172.1.1.1:8080/test/test) 1.请求localhost方式 HttpSession s ...

  7. 项目实战2.3-Nginx的“远方表哥”—Tengine

    本文收录在Linux运维企业架构实战系列 今天想起当初研究nginx反向代理负载均衡时,nginx自身的upstream后端配置用着非常不舒服: 当时使用的淘宝基于nginx二次开发的Tengine, ...

  8. ES6箭头函数基本用法

    ES6箭头函数基本用法 ``` window.onload = function(){ alert(abc); } //箭头函数 window.onload = ()=>{ alert(&quo ...

  9. 10分钟了解 react 引入的 Hooks

    "大家好,我是谷阿莫,今天要将的是一个...",哈哈哈,看到这个题我就想到这个开头.最近react 官方在 2018 ReactConf 大会上宣布 React v16.7.0-a ...

  10. 精读《sqorn 源码》

    1 引言 前端精读<手写 SQL 编译器系列> 介绍了如何利用 SQL 生成语法树,而还有一些库的作用是根据语法树生成 SQL 语句. 除此之外,还有一种库,是根据编程语言生成 SQL.s ...