POJ1017 【据说是贪心...】
题意: 
有6种面积的格子,给出这些格子的数量,然后有6*6的格子去容纳这6种面基,问最少需要几个6*6格子,使得所有类型的小格子被容纳。 
思路: 
按照面积的从大到小放。 
一开始还是太天真,还要用各种1去补,wa了一发…
具体都在代码那里注释了 
贴一发瞎写的挫code……….
#include <iostream>
#include <cstdio>
#include<vector>
#include <cstring>
#include <algorithm>
using namespace std;
typedef __int64 LL;
int a[10];
int main()
{
    while(1)
    {
        bool flag=false;
        for(int i=1;i<=6;i++)
        {
            scanf("%d",&a[i]);
            if(a[i])
                flag=true;
        }
        if(!flag)
            break;
        int ans=0;
        ans+=a[6];
        if(a[5])
        {
            ans+=a[5];              //5 只能一个
            if(a[1]<=11*a[5])       //用 1 去填
                a[1]=0;
            else
                a[1]-=11*a[5];
        }
        if(a[4])
        {
            ans+=a[4];
            if(a[2]<=5*a[4])        //如果在那么里面,2 填完,上 1
            {
                int x=a[4]*36-16*a[4]-a[2]*4;  //剩下的 1 的数量
                if(a[1]<=x)
                    a[1]=0;
                else
                    a[1]-=x;
                a[2]=0;
            }
            else                    //这里填了 4 后剩下的区域都是 2 填
                a[2]-=5*a[4];
        }
        if(a[3])
        {
            ans+=a[3]/4;        //4个3正好填满
            int x=a[3]%4;
            if(x==1)            //剩一个3
            {
                ans+=1;
                if(a[2])
                {
                    if(a[2]<=5) //一个3以后最多填5个2,这里是 2 不够了
                    {
                        int y=36-9-a[2]*4;
                        if(a[1]<=y)
                            a[1]=0;
                        else
                            a[1]-=y;
                        a[2]=0;
                    }
                    else
                    {
                        a[2]-=5;  //这里是2够的,只能+11 个 1
                        if(a[1]<=11)
                            a[1]=0;
                        else
                            a[1]-=11;
                    }
                }
            }
            else if(x==2)
            {
                ans+=1;
                if(a[2]<=3)     //两个3以后最多天3个2,这里是不够
                {
                    int y=36-18-a[2]*4;     //用1补
                    if(a[1]<=y)
                        a[1]=0;
                    else
                        a[1]-=y;
                    a[2]=0;
                }
                else        //2够的话,最多填6个1
                {
                    if(a[1]<=6)
                        a[1]=0;
                    else
                        a[1]-=6;
                    a[2]-=3;
                }
            }
            else if(x==3)
            {
                ans+=1;
                if(a[2]<=1)     //最多只能填1个 2 ,不够
                {
                    int y=9-a[2]*4;
                    if(a[1]<=y) //用1补
                        a[1]=0;
                    else
                        a[1]-=y;
                    a[2]=0;
                }
                else
                {
                    if(a[1]<=5) //2够的话,只能上5个 1
                        a[1]=0;
                    else
                        a[1]-=5;
                    a[2]-=1;
                }
            }
        }
        if(a[2])
        {
            ans+=a[2]/9;    //9个2正好填满
            int x=a[2]%9;
            if(x)           //2*2还有的多
            {
                ans+=1;
                int y=36-x*4;  //用1补
                if(a[1]<=y)
                    a[1]=0;
                else
                    a[1]-=y;
            }
        }
        if(a[1])
        {
            ans+=a[1]/36;       //36个1*1正好填满
            int x=a[1]%36;
            if(x)           //不够补。
                ans++;
        }
        printf("%d\n",ans);
    }
    return 0;
}
POJ1017 【据说是贪心...】的更多相关文章
- poj-1017 Packets (贪心)
		
http://poj.org/problem?id=1017 工厂生产高度都为h,长和宽分别是1×1 2×2 3×3 4×4 5×5 6×6的6种规格的方形物品,交给顾客的时候需要包装,包装盒长宽高都 ...
 - 最少拦截系统(杭电1257)(DP)+(贪心)
		
最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
 - Codeforce  835B - The number on the board (贪心)
		
Some natural number was written on the board. Its sum of digits was not less than k. But you were di ...
 - POJ-2181 Jumping Cows(贪心)
		
Jumping Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7329 Accepted: 4404 Descript ...
 - Jump Game I&&II——入门级贪心算法
		
Jump Game I Given an array of non-negative integers, you are initially positioned at the first index ...
 - BZOJ1150 [CTSC2007] 数据备份Backup 贪心_堆_神题
		
Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家 ...
 - C/c.pp:贪心,二分答案
		
说是贪心有点牵强. 其次,答案满足单调性,如果在k次操作能完成那么在k+1次操作内也能完成. 因为大不了你就把多的一次对方操作再进行一次就好了. 怎么操作呢? 我们从头扫这个序列,遇到每一个不匹配位置 ...
 - 修理牛棚 贪心 USACO
		
今天开始终于可以刷USACO的题啦 准备每一道都发一个题解 1010: 1.3.2 Barn Repair 修理牛棚 时间限制: 1 Sec 内存限制: 128 MB提交: 9 解决: 7[提交] ...
 - hdu4864  贪心
		
题意: 给你n太机器,m个任务,每个任务和机器都有两个权值x,y,每个机器只能被一个任务使用,条件是机器的两个权值分别比任务的大于等于,每个任务获得的价值是x*500+y*2,问你最多能 ...
 
随机推荐
- Override和Overload差别,Overloaded的方法能否够改变返回值的类型?
			
Overload是重载的意思, Override是覆盖的意思,也就是重写. 重载Overload表示同一个类中能够有多个名称同样的方法,但这些方法的參数列表各不同样(即參数个数或类型不同). 重写Ov ...
 - react jsx  数组变量的写法
			
1.通过 map 方法 var students = ["张三然","李慧思","赵思然","孙力气","王萌 ...
 - HDU 1060 Leftmost Digit (数学/大数)
			
Leftmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
 - v-model指令及其修饰符
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - Java堆内存与栈内存对比
			
在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有什么异同,以及和数据结构中的堆栈有何关系? 一.Java 堆存储空间 堆内存(堆存储空间)会在Java运行时分配 ...
 - 获取Wifi密码,不知道是不是真的
			
package com.example.wifipassword; import java.util.List; import android.app.Activity; import android ...
 - C#  does not contain a constructor that takes no parameter
			
C# 中子类要重用父类的构造函数时, 一般会在子类构造函数后面调用 : base(paratype, para). 如果父类有一个參数个数为1的构造函数, 没有 0 參构造函数. 子类想要重用这个构造 ...
 - VUE 之 组件
			
组件是为了解决页面布局的. 什么是单页面? 答:整个页面的切换都是在这个页面上进行变化的,没有页面的刷新. 1.全局组件 1.1全局组件流程: 1.创建全局组件======>创建一个Vue ...
 - ajax 提交所有表单内容及上传图片(文件),以及单独上传某个图片(文件)
			
我以演示上传图片为例子: java代码如下(前端童鞋可以直接跳过看下面的html及js): package com.vatuu.web.action; import java.io.File; imp ...
 - AIM Tech Round (Div. 2) C. Graph and String
			
C. Graph and String time limit per test 2 seconds memory limit per test 256 megabytes input standard ...