摘要:
题意:奶牛们要用K个不同类型的石头建太空电梯.每一种石头的高度为Hi,数量为Ci,且不能放在高于Ai的地方,求最高能建多高的太空电梯.分析:多重背包,数组标记.显然将ai小的放在下面会更优.所以先排序.code:const maxh=41000;var cnt:array[0..maxh] of longint; h,a,c:array[0..401] of longint; f:array[0..maxh] of boolean; n,i,j,k,tmp,ans:longint; procedure swap(var a,b:longint); var tmp:longint; begin 阅读全文
摘要:
题意:给出N个递增的数ai,M个递减的数bi.求是否存在一对ai,bj使得ai+bj=10000.分析:N<=50000,N^2效率一定不行了.看到a,b数列均单调,这可以加速.设置一个指针i指向a,j指向b.初始i=1,j=1.若ai+bj>10000,那么肯定bj+ai'(i'>i)都不等于10000,因为ai递增.所以j=j+1.同理,若ai+bj<10000,i=i+1.这个方法很有用,要记下.code(无聊地写了C++):#include<iostream>using namespace std;int a[51000],b[510 阅读全文
摘要:
题意:给出N个数(N<=10000),求是否可以找到连续的若干个数,使得他们的和为N的倍数.分析:首先根据抽屉原理,这个方案一定存在.边读边做,记录1~i的和模N的余数,如果这个数出现过,那么就可以输出方案了.code(0MS):var a,sum,bool:array[0..10001] of longint; n,i:longint; procedure print(l,r:longint); var o:longint; begin writeln(r-l+1); for o:=l to r do writeln(a[o]); halt; end;begin readln(n); 阅读全文