1004 Packets

来源:互联网 发布:弹弹play mac 编辑:程序博客网 时间:2024/06/04 23:28

一道贪心题,思路好想,不过细节有点多

自行百度题解

附上一个dalao代码

#include<stdio.h>int main(){int n,a,b,c,d,e,f,x,y;int u[4]={0,5,3,1};while(1){scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f);if(a==0&&b==0&&c==0&&d==0&&e==0&&f==0)break;n=d+e+f+(c+3)/4;//懂了y=5*d+u[c%4];//在已有n个的情况下,能装下y个2*2的if(b>y)n+=(b-y+8)/9;//把多的2*2的弄进来x=36*n-36*f-25*e-16*d-9*c-4*b;if(a>x)n+=(a-x+35)/36;//把1*1的弄进来printf("%d\n",n);}return 0;}

在附上我的辣鸡代码以作比较,有很多没有的代码,但是这些没用的代码让思路更清晰

#include<iostream>#include<cstdio>#include<cmath>#include<vector>#include<algorithm>#include<queue>#include<ctime>#include<cstring>#include<stdlib.h>#include<map>using namespace std;int size[7],num,scrap[7],cost,go,i;void cut(int x){if(x == 2){if(size[2] > scrap[2]) {size[2] -= scrap[2];scrap[2] = 0;}else {scrap[2] -= size[2];size[2] = 0;scrap[1] += scrap[2]*4;scrap[2] = 0;                              cut(1);}return ;                   //1. 防止运行上面代码后,x恰好变为1}if(x == 1){if(size[1] > scrap[1]){size[1] -= scrap[1];scrap[1] = 0;}else {scrap[1] -= size[1];size[1] = 0;}}}int main(){//freopen("1.in","r",stdin);//freopen("1.out","w",stdout);while(1){num = 0;go = 0;memset(scrap,0,sizeof(scrap));for(i = 1;i <= 6;i ++){scanf("%d",&size[i]);if(size[i] != 0) go = 1;}if(!go) break;num += size[6];size[6] = 0;num += size[5];scrap[1] += size[5]*11;cut(1);size[5] = 0;num += size[4];scrap[2] += size[4]*5;cut(2);size[4] = 0;num += size[3]/4;size[3] %= 4;if(size[3]) num ++;if(size[3] == 1){scrap[2] = 5;scrap[1] = 7;cut(2);}if(size[3] == 2){scrap[2] = 3;scrap[1] = 6;cut(2);}if(size[3] == 3){scrap[2] = 1;scrap[1] = 5;               //4.   数错数了.....数成了4cut(2);}size[3] = 0;num += size[2]/9;size[2] %= 9;if(size[2]) {num ++;scrap[1] += (9-size[2])*4;    //3.这个必须在size[2]!=0 的前提下}cut(1);size[2] = 0;num += size[1]/36;      size[1] %= 36;                //2.zz一般的忘了处理sizeif(size[1]) num ++;printf("%d\n",num);}//fclose(stdin);fclose(stdout);return 0;}


原创粉丝点击