1588: 合并果子
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1588
表示有完整的算法类代码,但是表示自己看不懂。具体的思路是第一次排序,后面充分利用第一次排序的结果,产生的第一个数插入到后边,通过这个方法来提高整体的效率。
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; #define max 1005 int a[max]; int main() { int t,b; long long count; scanf("%d",&t); while(t--){ scanf("%d",&b); for(int i = 0;i < b;i++) scanf("%d",a+i); count = 0; int c =b; sort(a,a+b); while(c>=2){ a[b-c+1]+=a[b-c]; count += a[b-c+1]; //for(int i =b-c+1;i <b;i++)cout<<a[i]<<" ";cout<<endl; //cout<<"b-c+1"<<b-c+1<<endl; for(int i = b-c+1;i < b;i++){ if(a[b-c+1]<a[i]){ int temp =a[b-c+1]; for(int j =b-c+2;j <i;j++){ a[j-1]=a[j]; } a[i-1]=temp; break; }else if(a[b-c+1]>=a[b-1]){ int temp =a[b-c+1]; for(int j =b-c+2;j < b;j++){ a[j-1]=a[j]; } a[b-1]=temp; break; } } //for(int i =b-c+1;i <b;i++)cout<<a[i]<<" ";cout<<endl; c--; } cout<<count<<endl; } return 0; }
我要坚持一年,一年后的成功才是我想要的。