合並果子
阿新 • • 發佈:2018-07-01
合並 width bre com idt std 分享 algorithm 這一
https://www.luogu.org/problemnew/show/P1090
初次思路
但是這樣做的思路是錯誤的,一分都沒有,後來經過推理可得
註意點:開始時先進行一次排序,然後每次都只有一個值因為相加改變,所以之後只需遍歷一次
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; int n,a[10010]; int sum=0; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); int x; sort(a+1,a+1+n); while(1){ x=1; if(a[x]==0)x++; if(x==n)break; a[x]+=a[x+1]; sum+=a[x]; for(int i=x+1;i<n;i++) a[i]=a[i+1];//替換 n--; for(int i=x;i<n;i++) if(a[i]>a[i+1])//因為之前有排序的基礎,而唯一改變的是a[x] swap(a[i],a[i+1]);//這一輪交換就是為a[x]找一個適當的位置 } printf("%d",sum); return 0; }
總結:做貪心的題,一定要多舉幾個例子來驗證,不要只看著樣例想
合並果子