4978: [Lydsy1708月赛]泛化物品

Time Limit: 5 Sec  Memory Limit: 256 MB
Submit: 220  Solved: 70
[Submit][Status][Discuss]

Description

泛化物品是背包问题里的一个概念,泛化物品并没有固定的体积和费用,而是它的费用随着分配给它的体积而变化
。在背包容量为V-1的背包问题中,泛化物品是一个定义域为[0,V)中的整数的函数h,当分配给它的体积为v时,花
费的费用就是h(v)。这个定义有一点点抽象,另一种理解是一个泛化物品就是一个数组h[0..V-1],给它体积v,费
用为h[v]。这就是所谓的泛化物品。定义泛化物品的和:g,h都是泛化物品,若泛化物品f满足f(v)=min{g(k)+h(v-
k)},其中0<=k<=v且0<=k,v-k<n,则称f是g与h的和,即f=g+h。现给定两个定义域均为[0,n)的泛化物品a,b,试求
出c=a+b。

Input

第一行包含一个正整数n(1<=n<=100000),表示定义域中的n。
第二行包含n个整数a_0,a_1,...,a_{n-1}(0<=a_i<n),表示泛化物品a。
第三行包含n个整数b_0,b_1,...,b_{n-1}(0<=b_i<n),表示泛化物品b。
输入数据保证a和b都是0到n-1的随机排列。

Output

对于每组数据输出一行2n-1个整数,依次表示c_0,c_1,...,c_{2n-2}。

Sample Input

5
3 4 2 0 1
2 3 0 4 1

Sample Output

5 6 3 2 2 0 1 1 2

HINT

Source

思路:没有什么特别的方法,但是由于数据是随机的,我们可以排序,先得出大部分结果,然后剩余部分靠暴力。

排序是指a,b分别排序,用最小的部分更新答案。 这里只用前2000个就ok的。

(不知道为什么我两个上面的两个for语句为什么就错了。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
const int inf=1e9;
int a[maxn],pos1[maxn],b[maxn],pos2[maxn],ans[maxn];
int main()
{
int N; scanf("%d",&N);
rep(i,,*(N-)) ans[i]=inf;
rep(i,,N-) scanf("%d",&a[i]),pos1[a[i]]=i;
rep(i,,N-) scanf("%d",&b[i]),pos2[b[i]]=i;
rep(i,,*(N-)) ans[i]=inf;
/*rep(i,0,min(N-1,2000)) 但是不知道这个为什么是错的
rep(j,0,min(N-1,2000)){
int p=pos1[i]+pos2[j];
ans[p]=min(ans[p],i+j);
}*/
rep(i,,min(,*(N-)))
rep(j,max(,i-(N-)),min(i,N-)){
int p=pos1[j]+pos2[i-j];
ans[p]=min(ans[p],i);
}
rep(i,,*(N-)) {
if(ans[i]>=inf){
rep(j,max(,i-(N-)),min(i,N-))
ans[i]=min(ans[i],a[j]+b[i-j]);
}
}
rep(i,,*(N-)) printf("%d ",ans[i]);
return ;
}

BZOJ4978: [Lydsy1708月赛]泛化物品(乱搞)的更多相关文章

  1. 【bzoj5071】[Lydsy十月月赛]小A的数字 乱搞

    题目描述 有一串数字 A1,A2...An 每次可以进行如下操作,选择一个数字 i ,将 (Ai-1 , Ai , Ai+1) 变为 (Ai-1 + Ai , -Ai , Ai+1 + Ai) ,特别 ...

  2. URAL 1827 Indigenous Wars(排序、乱搞)

    题意:给一个长度为n数组{a[i]}.有m个操作Ti,Si,Li表示找以Ti值结束,以Si值开始,长度为Li的连续子串.找到后,将区间的答案值设为1.一开始答案值全部为0.最后输出n个答案值. 好久没 ...

  3. UVA 11853 [dfs乱搞]

    /* 大连热身E题 不要低头,不要放弃,不要气馁,不要慌张 题意: 在1000×1000的格子内有很多个炮弹中心,半径给定. 为某人能否从西部边界出发,从东部边界走出. 不能输出不能,能的话输出最北边 ...

  4. Codeforces 732e [贪心][stl乱搞]

    /* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...

  5. 【BZOJ-4692】Beautiful Spacing 二分答案 + 乱搞(DP?)

    4692: Beautiful Spacing Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 46  Solved: 21[Submit][Statu ...

  6. 【BZOJ-3578】GTY的人类基因组计划2 set + map + Hash 乱搞

    3578: GTY的人类基因组计划2 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 367  Solved: 159[Submit][Status][ ...

  7. 【BZOJ-2937】建造酿酒厂 前缀和 + 展环为链 + 乱搞

    2937: [Poi2000]建造酿酒厂 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 70  Solved: 24[Submit][Status][D ...

  8. SCOI 2013 密码 & 乱搞

    题意: Fish 是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进.通过翻阅古籍,Fish 得知了这个密码的相关信息:1. 该密 ...

  9. 种树 & 乱搞

    题意: 在一个(n+1)*(m+1)的网格点上种k棵树,树必须成一条直线,相邻两棵树距离不少于D,求方案数. SOL: 这题吧...巨坑无比,本来我的思路是枚举每一个从(0,0)到(i,j)的矩形,然 ...

随机推荐

  1. 找回 linux root密码的几种方法

    第1种方法: 1.在系统进入单用户状态,直接用passwd root去更改  2.用安装光盘引导系统,进行linux rescue状态,将原来/分区挂接上来,作法如下: Java代码  #> c ...

  2. TCP三次握手和四次挥手详解

    背景描述通过上一篇中网络模型中的IP层的介绍,我们知道网络层,可以实现两个主机之间的通信.但是这并不具体,因为,真正进行通信的实体是在主机中的进程,是一个主机中的一个进程与另外一个主机中的一个进程在交 ...

  3. 004-notepad++安装。

    1.下载地址. 官网:https://notepad-plus-plus.org/ 2.安装.

  4. DHCP服务器配置实践

    实验背景:在LINUX系统上为一园区网络配置DHCP服务器,给网络内各主机自动分配IP地址,地址池范围为:192.168.X.100~192.168.X.200,配置作用域选项,其中网关为:192.1 ...

  5. poj1106 Transmitters

    地址:http://poj.org/problem?id=1106 题目: Transmitters Time Limit: 1000MS   Memory Limit: 10000K Total S ...

  6. Javaworkers团队第二周项目总结

    本周项目进展 本周我们小组成员在图书馆和网上查阅了很多资料,基本达到了预期的计划,完成了项目框架设计及代码模块设计. 设计思路 1.首先,根据用户需求合理分配代码密度,即: 用户直接操作(点击运行)的 ...

  7. CPA定律——一致性,可用性和分区容错性

    按照美国著名科学家 Eric Brewer 在 2000 年提出的理论,当技术架构从集中式架构向分布式架构演进,会遇到 “CAP 定律”的瓶颈. CAP 说明一个数据处理系统不能同时满足一致性,可用性 ...

  8. HDU 2680 Choose the best route(多起点单终点最短路问题)题解

    题意:小A要乘车到s车站,他有w个起始车站可选,问最短时间. 思路:用Floyd超时,Dijkstra遍历,但是也超时.仔细看看你会发现这道题目好像是多源点单终点问题,终点已经确定,那么我们可以直接转 ...

  9. Python学习札记(四十三) IO 3

    参考:操作文件和目录 NOTE: 1.Python内置的os模块可以直接调用操作系统提供的接口函数: 2.os.name 打印操作系统的名称:如果是posix,说明系统是Linux.Unix或Mac ...

  10. java学习之浅谈多线程3--线程间协作

    通过保证临界区上多个线程的相互排斥,线程同步完全可以避免竞争状态的发生,但是有时还需要线程之间的协作.有两种方式可用于线程间的通信. 1.使用条件Condition Condition接口: +awa ...