C++最小内积
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++最小内积的更多相关文章
- 『NYIST』第九届河南省ACM竞赛队伍选拔赛[正式赛二]-最小内积(第八届北京师范大学程序设计竞赛决赛)
H. 最小内积 Time Limit: 1000ms Memory ...
- <转>主成分分析(Principal components analysis)-最大方差解释,最小平方差解释
转自http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html http://www.cnblogs.com/jerrylead/ ...
- PCA最小平方误差理论推导
PCA最小平方误差理论推导 PCA求解其实是寻找最佳投影方向,即多个方向的标准正交基构成一个超平面. 理论思想:在高维空间中,我们实际上是要找到一个d维超平面,使得数据点到这个超平面的距离平方和最小 ...
- PCA降维-最大,最小方差解释
转自http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html http://www.cnblogs.com/jerrylead/ ...
- BZOJ 1391: [Ceoi2008]order [最小割]
1391: [Ceoi2008]order Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1509 Solved: 460[Submit][Statu ...
- 《徐徐道来话Java》:PriorityQueue和最小堆
在讲解PriorityQueue之前,需要先熟悉一个有序数据结构:最小堆. 最小堆是一种经过排序的完全二叉树,其中任一非终端节点数值均不大于其左孩子和右孩子节点的值. 可以得出结论,如果一棵二叉树满足 ...
- C++ 最小化到托盘
#define WM_SHOWTASK (WM_USER + 1) void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID &a ...
- nw.js自定义最小化图标的click事件
选择frameless时,最小化和关闭按钮的点击事件需要自己来做,办法是: /* * 下面两个模块一定要引入到js文件中 */ var gui = require('nw.gui'); var win ...
- AC日记——最小的N个和 codevs 1245
1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 有两个长度为 N ...
随机推荐
- Swift-技巧(二)模糊脸部功能
摘要 本文介绍模糊脸部的功能逻辑和实现方式,实现方式会尽可能的使用苹果提供的 API,保证功能高效率和简洁. 逻辑 模糊脸部的逻辑主要有两个流程,就是先找到脸部,然后模糊脸部,那么就引申出这两个实现问 ...
- Linux高级命令及mysql数据安装
Linux系列--高级命令--mysql数据库安装 数据库是用来组织.存储和管理数据的仓库 1.安装数据库:执行命令yum -y install mysql -server 2.启动数据库:安装完毕, ...
- 【PowereDesigner】使用方法|mysql画图使用|不在跟新
自己画E-R图时, 运行:Power Designer ..1 ..2 ..3 可以先放两个空的实体,然后,分别修改属性(鼠标右键,最后一项Properties),名称为:学生.课程. ..4 创建一 ...
- #ifndef #define #endif #ifdef 避免重复引用
一:在什么阶段处理 ? 预处理 预处理 预处理 首先注意这四个头文件保护符是在预处理阶段由系统默认的预处理器(Linux操作系统上默认是cpp)来处理的.它们的含义如下: #define XXX // ...
- JMeter源码导入到Intellij IDEA (八)
亲测:jmeter源码导入Intellij IDEA,导入,编译,运行! 一.环境:windows10操作系统,jdk1.8,Intellij IDEA 2018.3,jmeter5.0 下载jmet ...
- 一、Windows部署RabbitMQ
RabbitMQ官方网站非常详细,以下只是本人学习过程的整理 一.Windows部署RabbitMQ:https://www.cnblogs.com/yangleiyu/p/15539618.html ...
- Databend 设计概述 | 白皮书
Databend 是一个开源的.完全面向云架构的新式数仓,它提供快速的弹性扩展能力,并结合云的弹性.简单性和低成本,使 Data Cloud 构建变得更加容易. Databend 把数据存储在像 AW ...
- oracle中是否有except函数: select * from a except select * from b
除外: oracle没有except这个关键字,这个关键字属于sqlserver ,在oracle里,他叫minus,与except是一个意思. select a.code OrgId, b.code ...
- Maven 依赖调解源码解析(一):开篇
本文是系列文章<Maven 源码解析:依赖调解是如何实现的?>第一篇,主要做个开头介绍.并为后续的实验做一些准备.系列文章总目录参见:https://www.cnblogs.com/xia ...
- [loj6254]最优卡组
特殊处理$c_{i}=1$的$i$,显然对这些$a_{i,1}$求和即可,以下都假设$c_{i}\ge 2$ 对于每一个$i$,将$a_{i,j}$从大到小排序:接下来,对于所有$i$,按照$a_{i ...