$POJ2442\ Sequence$ 堆
正解:堆
解题报告:
全场除了我都切了系列$kk$
首先看$n=2$的情况.
首先暴力不说?就记录一个$sum$再分别记录$xy$两维的下标存到堆里面每次取队头并继续扩展就完事$QwQ$.
然后发现会枚举重复,就不太优秀,考虑优化$QwQ$.
于是考虑记录下这个点是扩展$x$的时候扩展来的还是扩展$y$的时候扩展来的,如果是扩展$x$的时候扩展来的就只扩展$x$了,否则就$xy$都要扩展.
这样就能保证每个状态只会被扩展一次了.
然后现在考虑$n>2$的情况.
就直接当$n=2$地做$n-1$次就完事
然后这个复杂度是$O(nmlogm)$的.
优化康考试总结$QwQ$,$over$
#include<algorithm>
#include<iostream>
#include<iomanip>
#include<vector>
#include<cstdio>
#include<queue>
using namespace std;
#define il inline
#define gc getchar()
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i) const int N=1e5+;
int n,m,as;
vector<int>V[N],v;
struct node{int sum,fr,nwx,nwy;};
priority_queue<node>Q; il int read()
{
ri x=;rb y=;rc ch=gc;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')y=,ch=gc;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il bool cmp(ri gd,ri gs){return gd>gs;}
il bool operator < (node gd,node gs){return gd.sum>gs.sum;}
il void work(ri x,ri y)
{
ri szx=V[x].size(),szy=V[y].size();
while(Q.size())Q.pop();;v.clear();Q.push((node){V[x][]+V[y][],,,});
rp(i,,m)
{
node nw=Q.top();Q.pop();v.push_back(nw.sum);
if(nw.nwx+<szx)Q.push((node){nw.sum-V[x][nw.nwx]+V[x][nw.nwx+],,nw.nwx+,nw.nwy});
if(nw.fr)continue;
if(nw.nwy+<szy)Q.push((node){nw.sum-V[y][nw.nwy]+V[y][nw.nwy+],,nw.nwx,nw.nwy+});
}
V[y]=v;
} int main()
{
//freopen("2442.in","r",stdin);//freopen("2442.out","w",stdout);
ri T=read();
while(T--)
{
n=read();m=read();as=;
rp(i,,n){V[i].clear();rp(j,,m)V[i].push_back(read());sort(V[i].begin(),V[i].end());}
rp(i,,n)work(i-,i);rp(i,,m-)printf("%d ",V[n][i]);printf("\n");
}
return ;
}
随机推荐
- Redis源码解析:08对象
前面介绍了Redis用到的所有主要数据结构,比如简单动态字符串(SDS).双端链表.字典.压缩列表.整数集合等.然而Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一 ...
- Session机制在页面间保持Cookie——大街网
解决Cookie有效期,页面间Cookie传递 解決大规模,长期有效采集. 之前做一个项目,要采集招聘网站的职位信息,智联,拉钩,中华英才,BOOS,大街网,写完了前4个,大街网数据加载方式是AJAX ...
- oracle函数 INITCAP(c1)
[功能]返回字符串并将字符串的第一个字母变为大写,其它字母小写; [参数]c1字符型表达式 [返回]字符型 [示例] SQL> select initcap('smith abc aBC') u ...
- oracle函数 current_timestamp
[功能]:以timestamp with time zone数据类型返回当前会话时区中的当前日期 [参数]:没有参数,没有括号 [返回]:日期 [示例]select current_timestamp ...
- 【hiho一下 第147周】小Hi的烦恼
[题目链接]:http://hihocoder.com/contest/hiho147/problem/1 [题意] [题解] bitset的应用; 设better[j][i]表示第j个科目排名为1. ...
- HTML5--语法
一.标记方法 1.内容类型(ContentType)还是.text/html 2.声明:<!DOCTYPE html SYSTEM “about:legacy-compat”> 3.字符编 ...
- img的alt和title的异同?
alt 是图片加载失败时,显示在网页上的替代文字: title 是鼠标放上面时显示的文字,title是对图片的描述与进一步说明; 这些都是表面上的区别,alt是img必要的属性,而title不是. 对 ...
- DOM事件和一些实用笔记
let el = document.body.querySelector("style[type='text/css'], style:not([type])");返回HTML文档 ...
- codeforces 609B
#include<bits/stdc++.h> using namespace std; ]; int main() { memset(num,,sizeof(num)); int n,m ...
- springmvc 过滤器和拦截器
1. 拦截器: interceptor 过滤器(filter)与拦截器(intercepter)相同点:1) 都可以拦截请求,过滤请求2) 都是应用了过滤器(责任链)设计模式 2.区别: 1) fi ...