POJ 1017 Packets

來源:互聯網
上載者:User

給1*1到6*6的包各若干個,問需要多少個6*6的包才能放的下..

沒有多想,直接就開始寫了,雖然寫的有點繁瑣,但思路清晰,很快就寫完了..

貪心的思想,盡量先放大的..程式注釋比較詳細,直接看程式吧,

#include <cstdio>using namespace std;int main(){int a[7];while(scanf("%d%d%d%d%d%d",&a[1],&a[2],&a[3],&a[4],&a[5],&a[6])){if(a[1]+a[2]+a[3]+a[4]+a[5]+a[6]==0)break;int res=0;while(a[6]-->0)res++;//6隻能放一個 while(a[5]-->0){//放一個5,剩下放1 res++;a[1]-=11;}while(a[4]-->0){//4佔1個,剩下放1和2 res++;if(a[2]>0){//還剩下2 a[2]-=5;if(a[2]<0){//a沒有放滿 a[1]+=a[2]*4;//沒有放滿2的地方放1,注意現在a[2]是負數 }}else{a[1]-=20;//沒2,只能放1了 } }int rem3=a[3]%4;//一個包放4個3,多出來的3res+=a[3]/4;//剩下不同個數的3分情況討論 if(rem3==1){res++;if(a[2]>0){//剩下的空間可以放5個2,7個1 a[2]-=5;a[1]-=7;if(a[2]<0){//沒2了,放1 a[1]+=a[2]*4;}}else{a[1]-=27;//全部放1 } }else if(rem3==2){res++;if(a[2]>0){//剩下的空間可以放3個2,6個1 a[2]-=3;a[1]-=6;if(a[2]<0){//沒2了,放1 a[1]+=a[2]*4;}}else{a[1]-=18;//全部放一 }}else if(rem3==3){res++;if(a[2]>0){//剩下的空間可以放1個2,5個1 a[2]-=1;a[1]-=5;}else{a[1]-=9;//全部放9; }}if(a[2]>0){//還剩2 res+=a[2]/9;if(a[2]%9!=0){res++;a[1]-=36-(a[2]%9)*4; } }if(a[1]>0){//還剩1 res+=a[1]/36;if(a[1]%36!=0)res++; }printf("%d\n",res); }return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.