摘要: 这是一道多重背包的题目;题意:有N那种物件,每种物件有个重量与个数;求A要般的重量不比B的轻,但要使他们的重量只差最小;#include<iostream>#include<cstdio>#include<cstring>using namespace std;void Completepack( int value, int sum ,int f[] ){ for( int i = value ; i<= sum ; i++ ) if( f[i] < f[i-value] + value ) f[i] = f[i-value] + value; 阅读全文
posted @ 2012-03-04 19:44 wutaoKeen 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一个长度为N(N <= 100000)的数列,然后是两种操作:U A B: 将第A个数替换为B (下标从零开始)Q A B: 输出区间[A, B]的最长连续递增子序列;这里注意:操作数可为100000;如果单纯的用暴力的方法可定超时,这里只是区间的操作,那么我们可以用线段数来做;我们知道在一个区间如果左区间的右值比右区间的左值小,那么这两个区间可以合并成一个区间,在与左区间的最大值和右区间的最大值做比较,找出最大值;如果小于那么我们就直接可以把左区间的最大值和右区间的最大值做比较,找出最大值;这里就要设立几个变量:l_value 区间的最大连续递增序列的左值;r_value区间 阅读全文
posted @ 2012-03-04 16:59 wutaoKeen 阅读(300) 评论(0) 推荐(0) 编辑