poj3253

原创 2015年07月10日 21:03:50
              **## 贪心法 ##**

开始的思路是:
1.N个数据排序
2.将最小的两个数据相加的和与剩下的数据合在一起组成N-1个数据,并将最小的两个数据相加的和存储在res中。
3.重复1,2直到剩下一个数据。
但是出现了Time Limit Exceeded

#include <iostream>
#include <algorithm>
#define MAX_N 20000
using namespace std;

int L[MAX_N],N;
long long ans=0;
void slove()
{
    int j,temp,mi=0;
    while(N-mi>1){
        L[mi+1]+=L[mi];
        ans+=L[mi+1];
        sort(L+mi+1,L+N);
    mi++;
    }
}

int main()
{
    cin>>N;
    for(int i=0;i<N;i++)
        cin>>L[i];
    sort(L,L+N);
    slove();
    cout<<ans<<endl;
    return 0;
}

随后 进行了修改,将每次将两个最小的数之和插入以排好序的数组中。

#include <iostream>
#include <algorithm>
#define MAX_N 20000
using namespace std;

int L[MAX_N],N;
long long ans=0;
void slove()
{
    int j,temp,mi=0;
    while(N-mi>1){
        L[mi+1]+=L[mi];
        ans+=L[mi+1];
        temp=L[mi+1];
        for(int i=mi+2;i<N;i++){  //进行插入
            if(temp<L[i]){
            for(j=mi+1;j<i-1;j++)
                L[j]=L[j+1];
            L[j]=temp;
            break;
            }
            if(i==N-1){
                for(j=mi+1;j<i;j++)
                     L[j]=L[j+1];
                L[j]=temp;
            }
        }
    mi++;
    }
}
int main()
{
    cin>>N;
    for(int i=0;i<N;i++)
        cin>>L[i];
    sort(L,L+N);
    slove();
    cout<<ans<<endl;
    return 0;
}

此题还可以用最优队列解。

//poj 3253 (优先队列)
#include <iostream>
#include <queue>
#define MAX_N 20000
using namespace std;
int L[MAX_N],N;
void slove()
{
    long long res=0;
    priority_queue<int,vector<int>,greater<int> >que;
    for(int i=0;i<N;i++)
        que.push(L[i]);
    while(que.size()>1)
    {
        int t1=que.top();
        que.pop();
        int t2=que.top();
        que.pop();
        que.push(t1+t2);
        res+=t1+t2;
    }
    cout<<res<<endl;
}
int main()
{
    cin>>N;
    for(int i=0;i<N;i++)
        cin>>L[i];
    slove();

    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

POJ 3253_AC_266MS_380K

  • 2009年02月28日 10:50
  • 1KB
  • 下载

PAT 修理牧场(25)(Huffman问题,优先队列priority_queue)(与poj 3253 一模一样的思路)

题目链接: 正确代码(1): #include #include #include #include #include using namespace std; class cmp{ ...
  • YJX_xx
  • YJX_xx
  • 2014年09月19日 19:59
  • 2355

poj 3253 Fence Repair 【哈弗曼树】+【优先队列】

Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 27742   ...

poj3253Fence Repair解法之贪心

Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 39794   ...

POJ 3253 STL priority_queue

Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 26845   Accepted: 87...

【原创】【合并类贪心】POJ 3253 1862 2709; Fence Repair && Stripies && Painter

合并类贪心基础题和原理解释首先这里有个合并类的基础题目,合并果子(分卷子)。(不是合并石子),本次的主角就是它(还有优先队列),而这道题目和代码就丢在:这个链接里了,还有一道87%一模一样的题叫做分卷...

poj 3253 Fence Repair(哈夫曼树)

Fence Repair 点击打开题目链接 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions...

POJ-3253 Fence Repair

Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24680   ...

POJ3253 Fence Repair

http://poj.org/problem?id=3253
  • my1995
  • my1995
  • 2014年07月25日 10:45
  • 212

POJ 3253 Fence Reair (贪心)

Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 27841   ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj3253
举报原因:
原因补充:

(最多只允许输入30个字)