POJ 2014 Flow Layout(水~)

470 篇文章 3 订阅

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值