栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 1169 Packing Rectangles

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 1169 Packing Rectangles

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>using namespace std;typedef struct Rect Rect;struct Rect {    int wid;    int ht;};Rectrotate ( Rect r ){    Rect nr;    nr.wid = r.ht;    nr.ht = r.wid;    return nr;}intmax ( int a, int b ){    return a > b ? a : b;}intmin ( int a, int b ){    return a < b ? a : b;}int tot;int bestarea;int bestht[101];voidrecord ( Rect r ){    int i;    if ( r.wid*r.ht < tot )        * ( long* ) 0 = 0;    if ( r.wid*r.ht < bestarea || bestarea == 0 ) {        bestarea = r.wid * r.ht;        for ( i = 0; i <= 100; i++ ) bestht[i] = 0;    }    if ( r.wid*r.ht == bestarea )        bestht[min ( r.wid, r.ht ) ] = 1;}voidcheck ( Rect *r ){    Rect big;    int i;        big.wid = 0;    big.ht = 0;    for ( i = 0; i < 4; i++ ) {        big.wid += r[i].wid;        big.ht = max ( big.ht, r[i].ht );    }    record ( big );        big.wid = 0;    big.ht = 0;    for ( i = 0; i < 3; i++ ) {        big.wid += r[i].wid;        big.ht = max ( big.ht, r[i].ht );    }    big.ht += r[3].ht;    big.wid = max ( big.wid, r[3].wid );    record ( big );        big.wid = r[0].wid + r[1].wid;    big.ht = max ( r[0].ht, r[1].ht );    big.ht += r[2].ht;    big.wid = max ( big.wid, r[2].wid );    big.wid += r[3].wid;    big.ht = max ( big.ht, r[3].ht );    record ( big );        big.wid = r[0].wid + r[1].wid;    big.ht = max ( r[0].ht, r[1].ht );    big.wid += max ( r[2].wid, r[3].wid );    big.ht = max ( big.ht, r[2].ht + r[3].ht );    record ( big );        big.ht = max ( r[0].ht + r[2].ht, r[1].ht + r[3].ht );    big.wid = r[0].wid + r[1].wid;        if ( r[0].ht < r[1].ht )        big.wid = max ( big.wid, r[2].wid + r[1].wid );        if ( r[0].ht + r[2].ht > r[1].ht )        big.wid = max ( big.wid, r[2].wid + r[3].wid );        if ( r[1].ht < r[0].ht )        big.wid = max ( big.wid, r[0].wid + r[3].wid );        big.wid = max ( big.wid, r[2].wid );    big.wid = max ( big.wid, r[3].wid );    record ( big );}voidcheckrotate ( Rect *r, int n ){    if ( n == 4 ) {        check ( r );        return;    }    checkrotate ( r, n + 1 );    r[n] = rotate ( r[n] );    checkrotate ( r, n + 1 );    r[n] = rotate ( r[n] );}voidcheckpermute ( Rect *r, int n ){    Rect t;    int i;    if ( n == 4 )        checkrotate ( r, 0 );    for ( i = n; i < 4; i++ ) {        t = r[n], r[n] = r[i], r[i] = t;            checkpermute ( r, n + 1 );        t = r[n], r[n] = r[i], r[i] = t;        }}int main ( void ){    Rect r[4];    int i;    for ( i = 0; i < 4; i++ )        scanf ( "%d %d", &r[i].wid, &r[i].ht );    tot = ( r[0].wid * r[0].ht + r[1].wid * r[1].ht + r[2].wid * r[2].ht + r[3].wid * r[3].ht );    checkpermute ( r, 0 );    printf ( "%dn", bestarea );    for ( i = 0; i <= 100; i++ )        if ( bestht[i] ) printf ( "%d %dn", i, bestarea / i );    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379534.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号