让它增加了一些独创性。加法操作现在需要成本,成本是这两个要加的总和。因此,要添加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
答案 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 作为数据结构。