POJ 3253

简介: /* 有一个农夫要把一个木板钜成几块给定长度的小木板,每次锯都要收取一定费用,这个费用就是当前锯的这个木版的长度 给定各个要求的小木板的长度,及小木板的个数n,求最小费用 3 8 8 5为例: 长度为 21 的木板,截成13和8花费 21 再从长度为13的木板上锯下长度为5的木板,花...
/*
有一个农夫要把一个木板钜成几块给定长度的小木板,每次锯都要收取一定费用,这个费用就是当前锯的这个木版的长度
给定各个要求的小木板的长度,及小木板的个数n,求最小费用
3
8 8 5为例:
长度为 21 的木板,截成13和8花费 21
再从长度为13的木板上锯下长度为5的木板,花费13
 共21+13 =34
*/
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main()
{
    int i,j,k,T;
    __int64 num,sum=0;
    while(cin>>T)
    {
        sum = 0;
        //因为运算结果可能超过int,所以虽然输入不超过int,也必须定义为__int64 
        priority_queue <__int64, vector<__int64> ,greater<__int64> > q;//两个双尖括号中间必须有空格 
        while(T--)
        {
            cin>>num;
            q.push(num);
        }
       // cout<<q.size()<<endl<<endl<<endl;
        while(q.size()>1)
        {
            __int64 a = q.top();
            q.pop();
            __int64 b = q.top();
            q.pop();
            q.push(a+b);
            sum+=a+b;
        }
        q.pop();
        cout<<sum<<endl;
    }
    return 0;
}
  
  
  
#include <iostream>
#include <algorithm>
using namespace std; 
const int MAX = 20001; 
int n; 
int blanks[MAX]; 
__int64 sum; 
int main() 
{
    int i,j; 
    while(cin>>n) 
    { 
    	sum = 0; 
    	for(i = 0; i < n; i++) 
        { 
    		cin>>blanks[i]; 
    	} 
    	sort(blanks,blanks + n); 
    	for(i = 1; i < n; i++) 
        { 
    		blanks[i] += blanks[i-1]; 
    		sum += blanks[i]; 
    		for(j = i; j < n-1; j++) 
            {//不必每次排序,逐个比较插入新的数据 
        		if(blanks[j] > blanks[j + 1]) 
        		  swap(blanks[j],blanks[j+1]); 
            }
        }
    	cout<<sum<<endl; 
    } 
    return 0;
}






//wa,理解错了题意,不存在无限长的木板, 
#include <iostream>
#include <cstdlib>
#include <algorithm>
using namespace std;
__int64 ch[20005];
int cmp(const void *a,const void *b)
{
    return *(__int64 *)a-*(__int64 *)b;
}
int main()
{
    int i,j,k,T;
    __int64 num,sum;
    while(cin>>T)
    {
        memset(ch,0,sizeof(ch));
        sum=0;
        i=0;
        while(T--)
        {
            cin>>num;
            sum += num;
            ch[i++]=num;
        }
     //   cout<<sum<<endl;
        qsort(ch,i,sizeof(__int64),cmp);
       // for(k=0;k<i;k++)
        //    cout<<ch[k]<<endl;
        for(j=0;j<i-1;j++)
            sum+=ch[j];
        cout<<sum<<endl;
    }
    return 0;
}
  

 

目录
相关文章
|
7月前
|
算法
Wormholes—POJ3259
Wormholes—POJ3259
|
7月前
|
算法 数据建模
Poj 3169(差分约束系统)
Poj 3169(差分约束系统)
35 0
POJ 1936 All in All
POJ 1936 All in All
78 0
|
人工智能 机器学习/深度学习
poj 3664
http://poj.org/problem?id=3664 进行两轮选举,第一轮选前n进入第二轮,第二轮选最高   #include #include using namespace std; struct vote { int a,b; int c; ...
738 0
poj 1455
Description n participants of > sit around the table. Each minute one pair of neighbors can change their places.
621 0
POJ-1003-hangover
Description How far can you make a stack of cards overhang a table? If you have one card, you can create a maximum overhang of half a card length.
769 0
|
存储 索引
|
机器学习/深度学习