关闭

POJ 2014 Flow Layout(水~)

386人阅读 评论(0) 收藏 举报
分类:

Description
将矩形放到框里(框的最大宽度给出),放不下,就放下一行。注意这里不能旋转,求最后放好后的宽度和高度
Input
多组用例,每组用例第一行为框的最大宽度,之后为每个小矩形的宽和高,以-1 -1结束一组用例输入,以0结束全部输入
Output
对于每组用例,输出放好后的宽度和高度
Sample Input
35
10 5
20 12
8 13
-1 -1
25
10 5
20 13
3 12
-1 -1
15
5 17
5 17
5 17
7 9
7 20
2 10
-1 -1
0
Sample Output
30 x 25
23 x 18
15 x 47
Solution
简单题,按题意描述来更新高度和宽度最大值即可即可
Code

#include<stdio.h>
#define max(x,y) (x>y?x:y)
int main()
{
    int n,l[100],w[100],i,j,maxl,maxw,maxll,maxww;
    while(scanf("%d",&n)&&n)
    {
        i=0;
        while(scanf("%d%d",&l[i],&w[i])&&l[i]!=-1&&w[i++]!=-1);
        j=i;//j为矩形个数 
        maxl=maxw=maxll=maxww=0;//maxl和maxw分别记录每行的宽度和高度,maxll和maxww记录长度、高度最大值 
        for(i=0;i<j;i++)
        {
            if(maxl+l[i]<=n)//能放下 
            {
                maxl+=l[i];//该行宽度累加 
                maxw=max(maxw,w[i]);//更新该行高度 
                if(i==j-1)//如果是最后一个矩形则需更新宽度高度最大值 
                {
                    maxll=max(maxl,maxll);
                    maxww+=maxw;
                }
            }
            else if(maxl+l[i]>n)//放不下,换行 
            {
                maxll=max(maxl,maxll);//先更新最大宽度 
                maxl=0;//该行宽度清零 
                maxww+=maxw;//更新最大高度 
                maxw=0;//该行高度清零 
                maxl+=l[i];//该行宽度累加 
                maxw=max(maxw,w[i]);//更新该行高度 
                if(i==j-1)//如果是最后一个矩形则需更新宽度高度最大值
                {
                    maxll=max(maxl,maxll);
                    maxww+=maxw;
                }
            }
        }
        printf("%d x %d\n",maxll,maxww);
    }
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:388105次
    • 积分:20152
    • 等级:
    • 排名:第428名
    • 原创:1692篇
    • 转载:0篇
    • 译文:0篇
    • 评论:64条
    最新评论