uva_437_The Tower of Babylon

来源:互联网 发布:数据铁笼和司法改革 编辑:程序博客网 时间:2024/06/05 18:09
lis变形,这里的长度由原来的1变为hsolve:          1.每个三面体,应该有3!种可能性          2.对所有可能性进行排序,因为体积小的不可能在体积大的后面枚举          3.求lis
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define MAXN    256typedef struct _BLOCK {        int l, w, h;}BLOCK;int dp[MAXN];BLOCK block[MAXN];int cmp(const BLOCK &a, const BLOCK &b){        if( a.l == b.l ) {                return a.w < b.w;        }        return a.l < b.l;}int dynamic_programming(const int &n){        int rst(0);        for(int i = 0; i < n; i ++) {                dp[i] = block[i].h;        }        for(int i = 0; i < n; i ++) {                for(int j = 0; j < i; j ++) {                        if( block[i].l > block[j].l &&                             block[i].w > block[j].w && dp[i] < dp[j]+block[i].h ) {                                dp[i] = dp[j]+block[i].h; rst = max(rst, dp[i]);                        }                }        }        return rst;}int main(int argc, char const *argv[]){#ifndef ONLINE_JUDGE        freopen("test.in", "r", stdin);#endif        int n, idx, x, y, cas(1);        while( scanf("%d", &n) && n ) { idx = n;                for(int i = 0; i < n; i ++) {                        scanf("%d %d %d", &block[i].l, &block[i].w, &block[i].h);                }                for(int i = 0; i < idx; i ++) {                        block[n].l = block[i].w; block[n].w = block[i].l; block[n ++].h = block[i].h;                        block[n].l = block[i].w; block[n].w = block[i].h; block[n ++].h = block[i].l;                        block[n].l = block[i].h; block[n].w = block[i].w; block[n ++].h = block[i].l;                        block[n].l = block[i].l; block[n].w = block[i].h; block[n ++].h = block[i].w;                        block[n].l = block[i].h; block[n].w = block[i].l; block[n ++].h = block[i].w;                }                sort(block, block+n, cmp);                printf("Case %d: maximum height = %d\n", cas ++, dynamic_programming(n));        }        return 0;}

原创粉丝点击