acm常用技巧四 超大背包问题

一.超大背包问题

pair ps[1<<(MXN/2)];
void Fun(){
    int n2=n/2;
    for(int i=0;i<1<>j&1){
                sw+=w[j];
                sv+=v[j];
            }
        ps[i]=make_pair(sw,sv);
    }
    sort(ps,ps+(1<>j&1){
                sw+=w[n2+j];
                sv+=v[n2+j];
            }
        }
        if(sw<=W){
            LL tv=(lower_bound(ps,ps+m,make_pair(W-sw,INF))-1)->second;
            res=max(res,sv+tv);
        }
    }
    printf("%lld\n",res);
}

二.坐标离散化

int compress(int x1[],int x2[],int w){
    vector xs;
    for(int i=0;i > que;
            que.push(make_pair(x,y));
            while(!que.empty()){
                int sx=que.front().first,sy=que.front().second;
                que.pop();
                for(int i=0;i<4;++i){
                    int tx=sx+dx[i],ty=sy+dy[i];
                    if(tx<0||W<=tx||ty<0||H<=ty) continue;
                    if(fld[ty][tx]) continue;
                    que.push(make_pair(tx,ty));
                    fld[ty][tx]=true;
                }
            }
        }
    printf("%d\n",ans);
}



你可能感兴趣的:(acm)