Description

向量是几何中的一个重要概念。

考虑两个向量 v1=(x1,x2,...,xn)和v2=(y1,y2,...,yn),向量的内积定义为

x1y1+x2y2+...+xnyn

例如向量(1,9,8,8)和(0,9,1,1)的内积是1×0+9×9+1×8+1×8=97。

下面我们考虑这样一个问题,如果我们能够任意的重新排列v1 和v2 中的分量(但是不能修改,删除和添加分量),然后再计算内积。显然这样计算的内积取决于选择的重排方式。

我们现在要问的是,通过重排向量中的分量,所能够获得的最小的内积是多少呢?

Input

输入数据包含3行。

第一行是一个整数N,N<=100,代表了向量的维数。

第二行是N个非负整数,给出了v1 中的元素,每个整数都在32位整数的范围内,用一个空格隔开。

第二行是N个非负整数,给出了v2 中的元素,每个整数都在32位整数的范围内,用一个空格隔开。

Output

输出一个整数,代表了通过重排向量中的分量,所能够获得的最小内积值。数据保证了最后结果在32位整数的范围内。

==========================================================开始整C++的分割线=====================================================================

 1 #include <iostream>
2 #include <vector>
3 #include <algorithm>
4
5 using namespace std;
6
7 int main()
8 {
9 //先接收向量的维数,再接收向量,
10 //对向量进行排序,在计算内积vec1.reserve(length);
11
12 vector<int> vec1,vec2;
13 int length;
14 cin >> length;//动态分配内存
15 vec1.reserve(length);
16 vec2.reserve(length);
17 int number;
18 int time = 0;
19 int sum = 0;
20 while(time < length && cin >> number ){
21 vec1.insert(vec1.begin()+time,number);
22 time ++;
23 }
24 time = 0;
25 while(time < length && cin >> number){
26 vec2.insert(vec2.begin()+time,number);
27 time ++;
28 }
29 //排序:vec1顺序 vec2逆序
30 sort(vec1.begin(),vec1.end());
31 sort(vec2.begin(),vec2.end());
32 reverse(vec2.begin(),vec2.end());
33
34 //vector<double>::iterator it;//得到迭代器对象
35 for(int i = 0;i < length; ++i){
36 sum += (vec1[i]*vec2[i]);
37
38 }
39 cout << sum << endl;
40 return 0;
41
42 }

keypoint:

1.最上面的三个库一定要导入!!前两个不用多说,第三个是使用sort()、reverse()方法的关键

2.代码有待优化  从line20 — line28是重复的代码,可以用一个循环包裹,降低代码冗余

3.line34的循环输出可以定义一个迭代器

4.所需内存如下

底下这个是错的

原先的代码是这样的,但是就无法在vec2中插入数据,打印出来的是数组的地址(我也不知道为啥。。有愿意解决这个的朋友欢迎留言)

 1 vector<int> vec1,vec2;
2 int length;
3 cin >> length;
4 vec1.reserve(length);
5 vec2.reserve(length);
6 int number;
7 for(int i = 0;i < 1; i++){
8 int time = 0;
9 while(cin >> number && time < length){
10 if(!i){
11 vec1.push_back(number);
12 }else{
13 vec2.push_back(number);
14
15 }
16 time ++;
17 }
18 }
19 //排序:vec1顺序 vec2逆序
20 sort(vec1.begin(),vec1.end());
21 sort(vec2.begin(),vec2.end());
22 //reverse(vec2.begin(),vec2.end());
23
24 //vector<double>::iterator it;//得到迭代器对象
25 for(int i = 0;i < length; ++i){
26 cout << vec2[i] << endl;
27 }
28 return 0;

C++最小内积的更多相关文章

  1. 『NYIST』第九届河南省ACM竞赛队伍选拔赛[正式赛二]-最小内积(第八届北京师范大学程序设计竞赛决赛)

    H. 最小内积                                                                   Time Limit: 1000ms Memory ...

  2. <转>主成分分析(Principal components analysis)-最大方差解释,最小平方差解释

    转自http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html http://www.cnblogs.com/jerrylead/ ...

  3. PCA最小平方误差理论推导

    PCA最小平方误差理论推导 PCA求解其实是寻找最佳投影方向,即多个方向的标准正交基构成一个超平面. 理论思想:在高维空间中,我们实际上是要找到一个d维超平面,使得数据点到这个超平面的距离平方和最小 ...

  4. PCA降维-最大,最小方差解释

    转自http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html http://www.cnblogs.com/jerrylead/ ...

  5. BZOJ 1391: [Ceoi2008]order [最小割]

    1391: [Ceoi2008]order Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1509  Solved: 460[Submit][Statu ...

  6. 《徐徐道来话Java》:PriorityQueue和最小堆

    在讲解PriorityQueue之前,需要先熟悉一个有序数据结构:最小堆. 最小堆是一种经过排序的完全二叉树,其中任一非终端节点数值均不大于其左孩子和右孩子节点的值. 可以得出结论,如果一棵二叉树满足 ...

  7. C++ 最小化到托盘

    #define WM_SHOWTASK (WM_USER + 1) void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID &a ...

  8. nw.js自定义最小化图标的click事件

    选择frameless时,最小化和关闭按钮的点击事件需要自己来做,办法是: /* * 下面两个模块一定要引入到js文件中 */ var gui = require('nw.gui'); var win ...

  9. AC日记——最小的N个和 codevs 1245

    1245 最小的N个和  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 有两个长度为 N ...

随机推荐

  1. 一次fork引发的惨案!

    "你还有什么要说的吗?没有的话我就要动手了",kill程序最后问道. 这一次,我没有再回答. 只见kill老哥手起刀落,我短暂的一生就这样结束了··· 我是一个网络程序,一直以来都 ...

  2. openstack 虚机热迁移问题:虚机状态一直处于迁移中的情况处理

    前提:在偶尔的虚机热迁移中,发现虚机一直属于迁移状态中. 但是查看后台流量监控,发现没有流量已经下来了.然后在目标机器上查看,发现kvm已经在目标机器上. 1.查看kvm 实际所处宿主机方法: a.拿 ...

  3. python中的itertools模块简单使用

    itertools 高效循环下创建循环器的标准库 Infinite itertools,无限迭代器 itertools.count(start=0, step=10) 默认返回一个从0开始,依次+10 ...

  4. 【Azure 存储服务】代码版 Azure Storage Blob 生成 SAS (Shared Access Signature: 共享访问签名)

    问题描述 在使用Azure存储服务,为了有效的保护Storage的Access Keys.可以使用另一种授权方式访问资源(Shared Access Signature: 共享访问签名), 它的好处可 ...

  5. k3s单机版安装部署 附一键安装脚本

    作者:SRE运维博客 博客地址: https://www.cnsre.cn/ 文章地址:https://www.cnsre.cn/posts/211109907029/ 相关话题:https://ww ...

  6. Linux mem 2.4 Buddy 内存管理机制

    文章目录 1. Buddy 简介 2. Buddy 初始化 2.1 Struct Page 初始化 2.2 Buddy 初始化 3. 内存释放 4. 内存分配 4.1 gfp_mask 4.2 nod ...

  7. Git 修改已提交的commit注释

    两种情况: 1.已经将代码push到远程仓库 2.还没将代码push到远程仓库,还在本地的仓库中 这两种情况下的修改大体相同,只是第一种情况最后会多一步 下面来说怎么修改 先搞清楚你要修改哪次的提交注 ...

  8. PLSQL批量执行SQL文件方法

    当需要执行多个sql文件,或者某个脚本中,sql语句数量很多时,手动逐个逐条执行不是一个明智的选择. PLSQL为我们提供了便捷的工具.使用方式如下: [工具]--[导入表]--[SQL插入]--[选 ...

  9. Typora的基础操作

    #一级标题 ##二级标题 ###三级标题 ####四级标题 加粗 倾斜 加粗又倾斜 ---下划线 插入图片 英文状态下 感叹号+中括号+小括号 //中括号内为图片名字 若想插入网络图片 在网络上找一个 ...

  10. GIS应用|快速开发REST空间分析服务

    随着计算机的快速发展,GIS已经在各大领域得到应用,和我们的生活息息相关, 但是基于GIS几大厂商搭建服务,都会有一定的门槛,尤其是需要server,成本高,难度大,这里介绍一种在线GIS云平台,帮你 ...