zoukankan      html  css  js  c++  java
  • 【codevs1245】最小的N个和

    problem

    solution

    codes

    //动态维护大根堆,贪心减少入队元素个数
    #include<iostream>
    #include<algorithm>
    #include<queue>
    using namespace std;
    const int maxn = 100010;
    int n, a[maxn], b[maxn];
    //q为答案的n个元素。
    priority_queue<int>q;
    //递归输出
    void print(){
        if(q.empty())return ;
        int t = q.top();  q.pop();
        print();
        cout<<t<<" ";
    }
    int main(){
        cin>>n;
        for(int i = 1; i <= n; i++)cin>>a[i];
        for(int i = 1; i <= n; i++)cin>>b[i];
        //step1:排序,让序列单调,后面用单调性减少状态数
        sort(a+1,a+n+1);
        sort(b+1,b+n+1);
        //step2:随便加n个元素作为初始值
        for(int i = 1; i <= n; i++){
            q.push(a[1]+b[i]);
        }
        for(int i = 2; i <= n; i++){
            if(a[i]+b[1]>=q.top())break;//step3因为单调,所以后面的a[i]+b[1]只会更大。
            for(int j = 1; j <= n; j++){
                if(a[i]+b[j]>=q.top())break;//step4:因为单调,所以后面的肯定会更大。
                //step5:如果没有break,则当前元素比答案中的最大值要大,更新答案。
                q.pop();
                q.push(a[i]+b[j]);
            }
        }
        //step6:此时队列中剩下的n各元素就是最小值
        print();
        return 0;
    }
  • 相关阅读:
    Nhibernate对象转JSON
    C# Windows服务
    C# 接收http请求
    C# XML 基础解系
    C# XML 序列化与反序列化
    C# Newtonsoft.Json 应用
    C# 读取自定义XML
    对图片添加水印
    iText: 对pdf文件添加水印
    java对Office文件处理技术(介绍)
  • 原文地址:https://www.cnblogs.com/gwj1314/p/9444740.html
Copyright © 2011-2022 走看看