刷题总结——array(ssoj)
题目:
题目描述
给定 2 个正整数序列 A1, A2,序列长度分别为 L1, L2。
你可以进行以下的一次操作:
1. 选择两个数 K1,K2(1≤K1≤L1, 1≤K2≤L2);
2. 移去 A1 中最后 K1 个数,得到这 K1 个数的和 S1,L1 对应减少 K1;
3. 移去 A2 中最后 K2 个数,得到这 K2 个数的和 S2,L2 对应减少 K2;
此次操作的费用为:(S1-K1) * (S2-K2)。
进行以上操作直至两个序列都为空,求最小的费用总和。
注意:序列为空当且仅当两个序列同时为空。
输入格式
第一行是两个正整数 L1和 L2,表示 A1 与 A2 的长度。
第二行 L1 个整数,表示序列 A1[1..L1]。
第三行 L2 个整数,表示序列 A2[1..L2]。
输出格式
输出一个整数,表示最小费用。
样例数据 1
备注
【样例说明】
第一次选取 K1=1,K2=1。费用为 (3-1)*(2-1) = 2。
第二次选取 K1=2,K2=1。费用为 (1+2-2)*(1-1) = 0。
所以,总费用为 2。
【数据范围】
对 20% 的输入数据:1≤L1,L2≤20
对 40% 的输入数据:1≤L1≤400;1≤L2≤150
对 100% 的输入数据:1≤L1,L2,A1[1..L1],A2[1..L2]≤5,000
题解:
很好的一道dp题·····
首先容易想到,为了消除每次sum-k中k带来的影响,我们可以将所有元素-1,这样每次计算的时候直接sum相乘即可····
然后考虑消除的策略···
打个比方l1=l2=4···我们如果要消除a1[l1]到a1[2]和a2[l2]到a2[3]这两段区间的数的话···最好的策略肯定不是直接一次性消除···而是先消除a1[l1]和a2[l2]这两个数,再消除a1[3]到a1[2]和a2[3]这两段····因此不难发现··每次消除的话a1和a2的区间长度有一个一定为1!
所以我们可以将区间消除转化为要么消除两段末端a1[x],a2[y]中其中一个··要么同时消除两个末端··且此时对答案的贡献为a1[x]*a2[y];
得出dp方程
f[i][j]=min(f[i][j+1],f[i+1][j],f[i+1][j+1])+a1[i+1]*a2[j+1]
其中f[i][j]表示两段分别剩余i,j个数时的最少费用
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int N=;
const int inf=0x3f3f3f3f;
inline int R()
{
char c;int f=,i=;
for(c=getchar();(c<''||c>'')&&c!='-';c=getchar());
if(c=='-') c=getchar(),i=-;
for(;c<=''&&c>='';c=getchar()) f=(f<<)+(f<<)+c-'';
return f*i;
}
int l1,l2,a1[N],a2[N];
int f[N][N];
int main()
{
//freopen("a.in","r",stdin);
l1=R(),l2=R();
memset(f,inf,sizeof(f));
for(int i=;i<=l1;i++) a1[i]=R(),a1[i]--;
for(int i=;i<=l2;i++) a2[i]=R(),a2[i]--;
f[l1-][l2-]=a1[l1]*a2[l2];
for(int i=l1-;i>=;i--)
for(int j=l2-;j>=;j--)
{
if(i==l1-&&j==l2-) continue;
f[i][j]=min(f[i][j+],min(f[i+][j+],f[i+][j]))+a1[i+]*a2[j+];
}
cout<<f[][]<<endl;
return ;
}
刷题总结——array(ssoj)的更多相关文章
- 刷题总结——date(ssoj)
题目: 题目背景 SOURCE:NOIP2015-SHY-9 题目描述 小Y和小Z好不容易有机会相见啦,可是邪恶的小H却不想让他们相见.现在有一些城市,城市之间有双向路径相连,有路径相连的城市之间可以 ...
- 【刷题】Search in a Big Sorted Array
原题戳我. 题目 Description Given a big sorted array with positive integers sorted by ascending order. The ...
- 用js刷题的一些坑
leecode可以用js刷题了,我大js越来越被认可了是吧.但是刷题中会因为忽略js的一些特性掉入坑里.我这里总结一下我掉过的坑. 坑1:js中数组对象是引用对象 js中除了object还有数组对象也 ...
- leetcode刷题总结一
大四狗找工作,要刷题了,leetcode上面题目比较适合面试算法类题目,也不纯粹为了蒙题,锻炼一下面试类型的思维 Single Number: 有N个数,其中只有一个数出现了一次,其他都是两次,找出那 ...
- LeetCode 刷题记录(二)
写在前面:因为要准备面试,开始了在[LeetCode]上刷题的历程.LeetCode上一共有大约150道题目,本文记录我在<http://oj.leetcode.com>上AC的所有题目, ...
- LeetCode 刷题记录
写在前面:因为要准备面试,开始了在[LeetCode]上刷题的历程.LeetCode上一共有大约150道题目,本文记录我在<http://oj.leetcode.com>上AC的所有题目, ...
- 一次失败的刷题经历:[LeetCode]292之尼姆游戏(Nim Game)(转)
最近闲来无事刷LeetCode,发现这道题的Accept Rate还是挺高的,尝试着做了一下,结果悲剧了,把过程写下来,希望能长点记性.该题的描述翻译成中文如下: 你正在和你的朋友玩尼姆游戏(Nim ...
- leetcode刷题指南
转载自:http://blog.csdn.net/lnho2015/article/details/50962989 以下是我个人做题过程中的一些体会: 1. LeetCode的题库越来越大,截止到目 ...
- 周刷题第一期总结(two sum and two numbers)
由于深深的知道自己是事件驱动型的人,一直想补强自己的薄弱环节算法,却完全不知道从哪里入手.所以只能采用最笨的办法,刷题.从刷题中遇到问题就解决问题,最后可能多多少少也能提高一下自己的渣算法吧. 暂时的 ...
随机推荐
- processing制作动态山水背景
效果代码 float theta, step; int num=5, frames = 1200; Layer[] layers = new Layer[num]; // void setup() { ...
- python中os.listdir( )函数读取文件夹
编写pytohn脚本时通常需要批处理. 列出指定目录下的所有文件/文件夹 os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表,但有个很明显的缺点,它的默认顺序不是有序的或 ...
- 剑指offer46 求1+2+...+n 以及& &&区别
参考代码: class Solution { public: int Sum_Solution(int n) { int result = n; result && (result + ...
- 超全的BAT一线互联网公司内部面试题库
想进BAT吗?点击上方的蓝色文字关注我们后,马上 告诉你答案!! 欢迎收藏和专注本文,以后我们会陆续的整理和收集其他的公司的面试题,扩大我们的面试库,形成专栏. 这是由乐视网工程师整理的一份一线互联网 ...
- centos7-vsftpd文件服务器
FTP简介: 文件传输协议(File Transfer Protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件.上传文件.下载文件. FTP 基于TCP协议生成一个虚拟的连接,主要 ...
- 【转】EM算法原理
EM是我一直想深入学习的算法之一,第一次听说是在NLP课中的HMM那一节,为了解决HMM的参数估计问题,使用了EM算法.在之后的MT中的词对齐中也用到了.在Mitchell的书中也提到EM可以用于贝叶 ...
- php 正则表达式中的 .*? 表示什么意思
我们知道我 .* 是任意字符,有的时候比较困惑在加个?什么意思. ?是非贪婪模式.*会匹配后面的一切字符,就是到结束的意思加?后就是不贪婪模式,这时要看?后边的字符是什么了,如.*?"的意思 ...
- Java JDBC的基本知识
CallableStatement接口——主要调用数据库中的存储过程 即为一种方法,可以调用, 传递参数 delimiter // //这里是改变执行操作语句的分隔符,也就是将SQL语句的&quo ...
- LVS-nat模式-原理介绍
集群,为解决某个特定问题将多台计算机组合起来形成的单个系统 lvs-nat: 本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发 lvs集群类 ...
- 【php】php安全问题
使用 —enable-force-cgi-redirect 选项 设置 doc_root 或 user_dir 或 open_basedir PHP运行的用户身份不能为ROOT 数据库字段加密 程序不 ...