1. 程式人生 > >2019寒假算法基礎集訓營1 - B 小a與"204"

2019寒假算法基礎集訓營1 - B 小a與"204"

算法 UNC number container -a scanf 統計 plain http

題目:

小a非常喜歡技術分享圖片這個數字,因為技術分享圖片
現在他有一個長度為技術分享圖片的序列,其中只含有技術分享圖片這三種數字
技術分享圖片為序列中第技術分享圖片個數,你需要重新排列這個數列,使得技術分享圖片最大(公式的含義是:每個數與前一個數差的平方的和)
註意:我們默認技術分享圖片

代碼:

#include <stdio.h> int main() { int n; //輸入的時候 while(scanf("%d",&n)!=EOF) { int a=0,b=0,c=0,sum=0; int zz,xx; //輸入一行的n個整數 for(int i=0;i<n;i++)
{ int num; scanf("%d",&num); if(num==0) a++; if(num==2) b++; if(num==4) c++; } //如果4 和 0 的個數相等的話 if(c==a) { if(b!=0) sum=16*(c+a)+4;
else sum=16*(c+a); } //如果4 比 0 的個數多的話 else if(c>a) { zz = c - (c-a-1); //0 少的 4 的個數 if(b==0) sum = 16*(a+zz); else if((b-1)>=(c-a-1)) sum = 16*(a+zz)+4+4*2*(c-a-1);
else sum = 16*(a+zz)+4+4*(c-zz+b-1); } //如果4 比 0 的個數少的話 else if(c<a) { xx = a-c; //剩下的0的個數 if(xx==b) sum = 16*2*c+4*2*xx; else { if(b==0) sum = 16*2*c; else { int number = xx<b? xx:b; sum = 16*2*c+4*(2*number+1); } } } printf("%d",sum); } } 解法: 1. 將4 0 2 分別統計個數 2. 通過貪心,分別4 0 4 0 2 (這裏有4和0的數目關系) 遇到的問題: 無法將解法流暢的轉換成代碼!多寫 提交的時候,c和從c++還是有區別的,用c++提交顯示錯誤

2019寒假算法基礎集訓營1 - B 小a與"204"