SRM602 (div2)


 TypoCoderDiv2   

没注意:their rating is 500 !!! 打脸。。


 PilingRectsDiv2

简单的暴力:

class PilingRectsDiv2 {
public:
	int getmax(vector <int>, vector <int>, int);
};

int PilingRectsDiv2::getmax(vector <int> X, vector <int> Y, int limit) {
	int ans = 0, i, j, k, Max;
	for(i=1; i<=200; ++i) 
	for(j=1; j<=200; ++j){
		if(i*j >= limit) {
			Max = 0;
			for(k=0; k<X.size(); ++k){
				if( (X[k]>=i&&Y[k]>=j) || (X[k]>=j&&Y[k]>=i) )
					Max++;
			}
			if(Max > ans ) ans = Max;
		}
	}
	if(ans == 0) return -1;
	else return ans;
}
还可以用记忆化搜索做(别人的代码):

int
solve (int idx, int l, int b) {
    if (idx == N) {
        if (l == LIM && b == LIM) return -1;
        if (l * b >= lim) return 0;
        if (l * b < lim) return -INF;
    }
    if (memo [idx][l][b] != -1) return memo [idx][l][b];
    int ret = 0;
    ret = 1 + max (solve (idx + 1, min (L [idx], l), min (B [idx], b)),
                   solve (idx + 1, min (B [idx], l), min (L [idx], b)));
    ret = max (ret, solve (idx + 1, l, b));
    return memo [idx][l][b] = ret;
}
 
class PilingRectsDiv2 {
    public:
    int
    getmax(vector<int> X, vector<int> Y, int limit) {
        L = X; B = Y;
        memset (memo, -1, sizeof (memo));
        LIM = 202;
        lim = limit;
        N = len (X);
        return solve (0, LIM, LIM);
    }
};

 BlackBoxDiv2

没看,不会做。

先留着,以后解决。

http://community.topcoder.com/stat?c=problem_solution&rd=15820&pm=12929&cr=23288241

http://community.topcoder.com/stat?c=problem_solution&rd=15820&pm=12929&cr=23282585

http://community.topcoder.com/stat?c=problem_solution&rd=15820&pm=12929&cr=23288971

http://community.topcoder.com/stat?c=problem_solution&rd=15820&pm=12929&cr=23137498

你可能感兴趣的:(SRM602 (div2))