ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++-POJ1017-Packets

2020-02-06 15:01:33  阅读:231  来源: 互联网

标签:箱子 include left2x2 d% Packets C++ POJ1017 ans 2x2


贪心算法,思路见代码

本来想搜索,结果又O(1)的算法,我佛了

其实每一种6x6的方案可以打表预处理,然后dp or search

但是既然可以贪心何乐而不为呢?

 1 #include <set>
 2 #include <map>
 3 #include <cmath>
 4 #include <queue>
 5 #include <vector>
 6 #include <cstdio>
 7 #include <cstdlib>
 8 #include <cstring>
 9 #include <iostream>
10 #include <algorithm>
11 using namespace std;
12 /*
13 //体积为4,5,6的有一个就需要一个箱子,体积为3的需要(c+3)/4个箱子
14 //剩余的空间我们采取贪心的策略,先放2x2的箱子,4x4的箱子还剩下boxD*5个2x2的空间
15 //对于3x3底面积的需要分情况讨论
16 //3x3的箱子装完了还剩下3个,留下了1个2x2的空间
17 //3x3的箱子装完了还剩下2个,留下了3个2x2的空间
18 //3x3的箱子装完了还剩下2个,留下了5个2x2的空间
19 //解决了2x2的空间还剩下1x1的,总体积减去所有其他箱子的体积,就剩下1x1的空间了。
20 */
21 int main() {
22     for(int a,b,c,d,e,f,ans; scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f)&&(a+b+c+d+e+f);) {
23         ans=(c+3)/4+d+e+f;
24         int left2x2=d*5;
25         if(c%4==1)left2x2+=5;
26         else if(c%4==2)left2x2+=3;
27         else if(c%4==3)left2x2++;
28         if(b>left2x2)ans+=((b-left2x2)+8)/9;
29         int left1x1=36*ans-4*b-9*c-16*d-25*e-36*f;
30         if(a>left1x1)ans+=((a-left1x1)+35)/36;
31         cout<<ans<<endl;
32     }
33     return 0;
34 }

 

标签:箱子,include,left2x2,d%,Packets,C++,POJ1017,ans,2x2
来源: https://www.cnblogs.com/JasonCow/p/12268745.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有