zoukankan      html  css  js  c++  java
  • bnuoj4227最小内积

    最小内积

    1000ms
    1000ms
    65536KB
     
    64-bit integer IO format: %lld      Java class name: Main
    Font Size:

      

    向量是几何中的一个重要概念。
    考虑两个向量 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行。
    第一行是一个整数NN<=1000,代表了向量的维数。
    第二行是N个整数,给出了v1 中的元素,每个整数都在32位整数的范围内,用一个空格隔开。
    第二行是N个整数,给出了v2 中的元素,每个整数都在32位整数的范围内,用一个空格隔开。
     

    Output

      

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

    Sample Input

    5
    1 2 3 4 5
    1 0 1 0 1
    
     

    Sample Output

    6


    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    bool cmp(int a,int b)
    {
        return a>b;
    }
    int main()
    {
        int i,j,sum;
        int a[1010],b[1010],n;
        while(~scanf("%d",&n))
        {
            for(i=0; i<n; i++)
            {
                scanf("%d",&a[i]);
            }
            for(i=0; i<n; i++)
                scanf("%d",&b[i]);
            sort(a,a+n);
            sort(b,b+n,cmp);
            sum=0;
            for(i=0; i<n; i++)
                sum+=a[i]*b[i];
            printf("%d ",sum);
        }
        return 0;
    }
  • 相关阅读:
    关于springboot项目使用yml类型的配置文件
    关于个人电脑连不上公司svn服务器,显示拒绝访问的错误
    改变思考问题的方式——SQL排序查询
    FreeMarker入门级
    个人电脑安装svn实录
    tomcat配置虚拟路径,可以解决实际开发中测试时前端访问后台电脑上的图片的问题
    springmvc的运行原理个人见解
    [CF915F] Imbalance Value of a Tree
    [CF768G] The Winds of Winter
    [BZOJ4241] 历史研究
  • 原文地址:https://www.cnblogs.com/lxm940130740/p/3339180.html
Copyright © 2011-2022 走看看