zoukankan      html  css  js  c++  java
  • POJ 2442-Sequence(优先队列)

    明白队列的话就很简单,不会就慢慢理解慢慢学,我也是刚刚接触

    代码:

        #include <iostream>
        #include <string.h>
        #include <stdio.h>
        #include <algorithm>
        #include <queue>
    
        using namespace std;
    
        int main()
        {
            priority_queue<int, vector<int>, less<int> >q;
            int n,m,i,j,k;
            int t;
            int a[2001],b[2001];
            scanf("%d",&t);
            while(t--)
            {
                scanf("%d%d",&n,&m);
                for(i=0;i<m;i++)
                    scanf("%d",&a[i]);//先输入一行数据按顺序排好
                sort(a,a+m);
                for(i=1;i<n;i++)//输入剩下的n-1组数据,进行求和,选择最优的继续循环
                {
                    for(j=0;j<m;j++)
                        scanf("%d",&b[j]);
                    for(j=0;j<m;j++)
                        q.push(a[0]+b[j]);//第一组放进去先默认最小sum
                    for(j=1;j<m;j++)//循环找符合条件的放进队列里
                    {
                        for(k=0;k<m;k++)
                        {
                            if(a[j]+b[k]<q.top())
                            {
                                q.pop();
                                q.push(a[j]+b[k]);
                            }
                        }
                    }
                    for(j=0;j<m;j++)//更新最小sum继续循环
                    {
                        a[j]=q.top();
                        q.pop();
                    }
                    sort(a,a+m);
                }
                for(i=0;i<m;i++)
                {
                    if(i==m-1)
                        printf("%d
    ",a[i]);
                    else
                        printf("%d ",a[i]);
                }
    
            }
        }
        #include <iostream>
        #include <string.h>
        #include <stdio.h>
        #include <algorithm>
        #include <queue>
    
        using namespace std;
    
        int main()
        {
            priority_queue<int, vector<int>, less<int> >q;
            int n,m,i,j,k;
            int t;
            int a[2001],b[2001];
            scanf("%d",&t);
            while(t--)
            {
                scanf("%d%d",&n,&m);
                for(i=0;i<m;i++)
                    scanf("%d",&a[i]);//先输入一行数据按顺序排好
                sort(a,a+m);
                for(i=1;i<n;i++)//输入剩下的n-1组数据,进行求和,选择最优的继续循环
                {
                    for(j=0;j<m;j++)
                        scanf("%d",&b[j]);
                    for(j=0;j<m;j++)
                        q.push(a[0]+b[j]);//第一组放进去先默认最小sum
                    for(j=1;j<m;j++)//循环找符合条件的放进队列里
                    {
                        for(k=0;k<m;k++)
                        {
                            if(a[j]+b[k]<q.top())
                            {
                                q.pop();
                                q.push(a[j]+b[k]);
                            }
                        }
                    }
                    for(j=0;j<m;j++)//更新最小sum继续循环
                    {
                        a[j]=q.top();
                        q.pop();
                    }
                    sort(a,a+m);
                }
                for(i=0;i<m;i++)
                {
                    if(i==m-1)
                        printf("%d
    ",a[i]);
                    else
                        printf("%d ",a[i]);
                }
    
            }
        }
  • 相关阅读:
    使用nmon进行系统监控
    linux中内存使用原理
    测试网站访问速度的5个方法
    手机站点击商务通无轨迹解决方法
    PHP开启伪静态配置
    Phpcms V9当前栏目及所有二级栏目下内容调用标签
    手机访问网跳转到手机端
    移动端web开发技巧 -- 转载
    php错误:You don't have permission to access / on this server.
    Navicat for MySQL使用手记(上)--创建数据库和表
  • 原文地址:https://www.cnblogs.com/nr1999/p/8946765.html
Copyright © 2011-2022 走看看