暂无链接
石子合并问题
问题描述
有n堆石子,每堆1个,要合并成一堆,规定每次可以任意选两堆合并成新的一堆,两堆中较少的石子数记为该次合并的得分。
输入n
输出最大得分
样例输入
7
样例输出
9
题解
水题。。。
贪心一波,肯定小的跟小的合并划算一些。
代码
#include<bits/stdc++.h>
using namespace std;
int n,sum;
priority_queue<int,vector<int>,greater<int> >dui;
void in()
{
int x;
scanf("%d",&n);
for(int i=1;i<=n;++i)
dui.push(1);
}
void ac()
{
int ans=0,a,b;
while(dui.top()!=n)
{
a=dui.top();dui.pop();
b=dui.top();dui.pop();
ans+=a;
dui.push(a+b);
}
printf("%d",ans);
}
int main()
{
in();ac();
return 0;
}