题目大意:
主人公想在一张w*h的明信片外套信封。他有n个信封,每个信封的长宽给出,问最多能套多少层。给出从小到大的顺序。
解题思路:
最长上升子序列,只不过是记忆路径。
下面是代码:
#include #include #include #include #include #include #include #include #include #include #include #include #define eps 1e-10#define pi acos(-1.0)#define inf 107374182#define inf64 1152921504606846976#define lc l,m,tr 0 ? (x) : -(x))#define clear1(A, X, SIZE) memset(A, X, sizeof(A[0]) * (min(SIZE,sizeof(A))))#define clearall(A, X) memset(A, X, sizeof(A))#define memcopy1(A , X, SIZE) memcpy(A , X ,sizeof(X[0])*(SIZE))#define memcopyall(A, X) memcpy(A , X ,sizeof(X))#define max( x, y ) ( ((x) > (y)) ? (x) : (y) )#define min( x, y ) ( ((x) h)cnt++; } if(cnt==0) { puts("0"); return 0; } clearall(pre,-1); sort(envelopes,envelopes+cnt); int maxnum=1,maxp=0; dp[0]=1; for(int i=1; i =0; j--) { if(envelopes[j].w maxnum) { maxnum=dp[i]; maxp=i; } } printf("%d\n",maxnum); output(maxp); return 0;}
查看更多关于CodeforcesBetaRound#4(Div.2Only)D.MysteriousPresen的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did106405