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,问你最多能 ...
随机推荐
- 百度云分享文件自己设置password
我们在用百度云分享的时候都是百度云随机给我们生成的password.我们能够通过以下的一条js脚本代码来自己定义百度云分享password javascript:require(["func ...
- 在java中String类为什么要设计成final?
大神链接:在java中String类为什么要设计成final? - 程序员 - 知乎 我进行了重新排版,并且更换了其中的一个例子,让我们更好理解. String很多实用的特性,比如说“不可变性”,是工 ...
- 面向对象 委托变量和this的使用
委托方法: this的使用:
- android-auto-scroll-view-pager
https://github.com/eltld/android-auto-scroll-view-pager
- error at ::0 can't find referenced pointcut pointCutName 错误解决方法
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire method: publi ...
- Seesion和Cookie详解2
转载来自: https://www.toutiao.com/a6693986851193094664/?tt_from=weixin&utm_campaign=client_share& ...
- UVa 12587 Reduce the Maintenance Cost(Tarjan + 二分 + DFS)
题意:n个城市(n <= 10000), 有m条边(m <= 40000),每一个城市有一个维护费用Cost(i),除此之外,每条边的维修费用为去掉该边后不能通信的城市对数与边权的积.这个 ...
- MapReduce算法形式二:去重(HashSet)
案例二:去重(shuffle/HashSet等方法)shuffle主要针对的是key去重HashSet主要针对values去重
- hive impala C++ Java垃圾回收 Garbage Collection GC
hive impala impala 推荐每个节点内存 2^7~2^8GB Impala与Hive的比较 - 文章 - 伯乐在线 http://blog.jobbole.com/43233/ &l ...
- 小程序 swiper banner 图片 居中
var imgUrlApp = getApp().globalData.imgUrlApp; Page({ /** * 页面的初始数据 */ data: { indicatorDots: true, ...