在uva中获得WA 10954

时间:2019-07-15 04:06:24

标签: c++ sorting stl uva

让它增加了一些独创性。加法操作现在需要成本,成本是这两个要加的总和。因此,要添加1和10,需要的成本为11。如果要添加1、2和3,则有几种方式1 + 2 = 3,成本= 31 + 3 = 4,成本= 42 + 3 = 5 ,费用= 53 + 3 = 6,费用= 62 + 4 = 6,费用= 61 + 5 = 6,费用= 6总计= 9总计= 10总计= 11我希望您已经了解您的任务,添加一组整数以便输入每个测试用例将以一个正数N(2N5000)开头,后跟N个正整数(均小于100000)。 N的值为零时终止输入。这种情况不应该处理。输出对于每种情况,请在一行中打印最小的总添加成本。

样本输入

3   
1 2 3   
4  
1 2 3 4  
0  

样本输出

9  
19  

我试图对给定的数组进行排序,然后将另一个数组用于求和(CS),并对CS的所有元素求和,但cs [0]除外。.我正在通过这种方法获取WA,请解释

int n,i,hold=0;   

while(1)   
{
    cin>>n;

    if(n==0){break;}

    int arr[n],cs[n];

    for(i=0;i<n;i++) cin>>arr[i];

    sort(arr,arr+i);

    cs[0]=arr[0];

    for(i=1;i<n;i++){cs[i]=arr[i]+cs[i-1]; }

    cs[0]=0;
    int sum=0;
    for(i=1;i<n;i++){sum+=cs[i]; }
    cout<<sum<<endl;
    sum=0;

}

输入:

9
66 85 52 22 44 1 59 88 67 
0

我出去了

1822

预期结果(调试):

1454

获得WA

2 个答案:

答案 0 :(得分:0)

使用最小堆并添加2个最小的元素。示例:

1 2 3-> 3 3-> 6。 1 2 3 4-> 3 3 4-> 4 6-> 10。

希望有帮助。

答案 1 :(得分:0)

您的想法不能解决此问题。 在采用了数据结构中的所有元素之后,您应该重复这3点 1)排序。 2)求和第一和第二个值,并从数据结构中删除第一和第二个值 3)将总和添加到成本和数据结构中。
您可以使用 priority_queue 作为数据结构。