算法设计与分析 2.5 Joyvan的难题
★题目描述
Joyvan最近遇到了一个难题,对于一个包含
N个整数的序列a1,a2,……,aN,定义:f(i,j)=(j-i)2+(j∑k=i+1 ak)2
现在Joyvan想要你帮他计算所有
f(i,j)(1<=i<j<=N)的最小值。
★输入格式
输入的第一行为数字N,表示给定序列的长度。
第二行包含N个整数,表示序列中的整数a1,a2,……,aN。
★输出格式
输出一个整数,即所有f(i,j)(1<=i<j<=N)的最小值。
★样例输入
4
1 0 0 -1
★样例输出
1
★提示
无
★参考代码
思路参考自共享文件
网上找到的过10个点的代码
#include <iostream>
#define SQUARE(x) ((x)*(x))
using namespace std;
int main()
{
int n;
cin >> n;
long total = 0;
long sum[n+10];
int tmp;
for(int i=0; i<n; i++){
scanf("%d", &tmp);
total += tmp;
sum[i] = total;
}
long minRes = 0x7ffffff;
int i, j;
for(i=0; i<n; i++){
for(j=i+1; j<n; j++){
if(SQUARE(j-i) > minRes){
break;
}
minRes = min(SQUARE(j-i) + SQUARE(sum[j] - sum[i]), minRes);
}
}
cout << minRes << endl;
return 0;
}
下面是自己写的,用二分法,但是仅过8个点,最后两个测试点超时了
/*
对公式进行变形
假设 xi=i,yi= i∑k=1 ak
那么 f(i,j)=(xj-xi)2+(yj-yi)2
那么也就是相当于问距离最近的两点
现在的问题就是如何使用二分法找到距离最近的两点
可以百度“平面最近点对”,即可找到模板题
*/
#include<bits/stdc++.h>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
using namespace std;
int n;
int Y[100005]={0};
long Dist(int i, int j){
return 1l*(i-j)*(i-j) + 1l*(Y[i]-Y[j])*(Y[i]-Y[j]);
}
long df(int L, int R){
if(L>=R) return 0x3ffff;
if(L+1==R) return Dist(L,R);
int mid = (L+R)>>1;
long min_dist = min(df(L,mid), df(mid+1,R));
int lim = sqrt(min_dist)+1;
int sta = max(L, mid-lim), end=min(R, mid+lim);
for(int i=sta; i<=end; ++i) for(int j=i+1; j<=end; ++j){
min_dist = min(min_dist, Dist(i, j));
}
return min_dist;
}
int main(){
int a;
scanf("%d",&n);
for(int i=1; i<=n; ++i){
scanf("%d",&a);
Y[i]=Y[i-1]+a;
}
cout<<df(1, n)<<endl;
return 0;
}
算法设计与分析 2.5 Joyvan的难题的更多相关文章
- 算法设计与分析 1.1 Joyvan的矩阵
★题目描述 Joyvan有一个大小为n * m的矩阵,现在他要对矩阵进行q次操作,操作分为如下三种: 0 x y:交换矩阵的x.y两行. 1 x y:交换矩阵的x.y两列. 2 x y:求当前矩阵第x ...
- 【技术文档】《算法设计与分析导论》R.C.T.Lee等·第7章 动态规划
由于种种原因(看这一章间隔的时间太长,弄不清动态规划.分治.递归是什么关系),导致这章内容看了三遍才基本看懂动态规划是什么.动态规划适合解决可分阶段的组合优化问题,但它又不同于贪心算法,动态规划所解决 ...
- 算法设计与分析 - AC 题目 - 第 5 弹(重复第 2 弹)
PTA-算法设计与分析-AC原题 - 最大子列和问题 (20分) 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+, ..., Nj },其中 ≤i ...
- 算法设计与分析 - AC 题目 - 第 2 弹
PTA-算法设计与分析-AC原题7-1 最大子列和问题 (20分)给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1 ...
- 算法设计与分析-Week12
题目描述 You are given coins of different denominations and a total amount of money amount. Write a func ...
- 南大算法设计与分析课程复习笔记(1) L1 - Model of computation
一.计算模型 1.1 定义: 我们在思考和处理算法的时候是机器无关.实现语言无关的.所有的算法运行在一种“抽象的机器”之上,这就是计算模型. 1.2 种类 图灵机是最有名的计算模型,本课使用更简单更合 ...
- 算法设计与分析基础 (Anany Levitin 著)
第1章 绪论 1.1 什么是算法 1.2 算法问题求解基础 1.2.1 理解问题 1.2.2 了解计算设备的性能 1.2.3 在精确解法和近似解法之间做出选择 1.2.4 算法的设计技术 1.2.5 ...
- 算法设计与分析(李春保)练习题答案v1
1.1第1 章─概论 1.1.1练习题 1.下列关于算法的说法中正确的有(). Ⅰ.求解某一类问题的算法是唯一的 Ⅱ.算法必须在有限步操作之后停止 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模 ...
- 算法设计与分析 - 李春葆 - 第二版 - pdf->word v3
1.1 第1章─概论 练习题 . 下列关于算法的说法中正确的有( ). Ⅰ.求解某一类问题的算法是唯一的 Ⅱ.算法必须在有限步操作之后停止 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊 Ⅳ. ...
随机推荐
- JavaScript for 、for...of 、for...in 等 iteration 效率测试
由于不同浏览器,不同版本性能不一,且控制台本质是是套用了一大堆eval,沙盒化程度高,所以需使用node环境测试来提高准确性 // 准备待测数组 const NUM = 1e7; let arr = ...
- jQuery淡入淡出轮播图实现
大家好我是 只是个单纯的小白,这是人生第一次写博客,准备写的内容是Jquery淡入淡出轮播图实现,在此之前学习JS写的轮播图效果都感觉不怎么好,学习了jQuery里的淡入淡出效果后又写了一次轮播图效果 ...
- 一文解读Redis (转)
本文由葡萄城技术团队编撰并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 引言 在Web应用发展的初期,那时关系型数据库受到了较为广泛的关注和应用,原 ...
- django的使用INNODE的方式,排除错误MySQL Strict Mode is not set for database connection 'default'
出现如下错误: 解决办法: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mxshop', 'HO ...
- 剑指Offer-44.翻转单词顺序列(C++/Java)
题目: 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“student. ...
- Flink概述| 配置
流处理技术的演变 在开源世界里,Apache Storm项目是流处理的先锋.Storm提供了低延迟的流处理,但是它为实时性付出了一些代价:很难实现高吞吐,并且其正确性没能达到通常所需的水平,换句话说, ...
- 转载-C语言中<<、>>、&、|的实际用途
C语言中<<.>>.&.|的实际用途 作为一个开发人员,在看别人项目或者看第三方库的源代码时,可能经常会看到譬如a>>4&0x0f这样的写法,对于一 ...
- API收藏
1.百度图片api get 方法$word = '北海';//要搜索的词$num = 3;//要搜索的数量$url = 'https://image.baidu.com/search/acjson?t ...
- distinct关键字对执行计划的影响
一.前言 最近看到一段话,"count(distinct 列名)若列上有索引,且有非空约束或在where子句中使用is not null,则会选择索引快速全扫描.其余情况则选择全表扫描&qu ...
- 数据处理之以OLEDB方式读取Excel数据丢失的原因及解决方法
1.引言 在应用程序的设计中,经常需要读取Excel数据或将Excel数据导入转换到其他数据载体中,C#读取Excel的方式有两种,一种是通过OLEDB方式读取,另一种为通过COM组件方式读取.近段时 ...