做推广适合哪些网站,小规模公司怎么注销,南京 电子商务网站,池州建设机械网站题目描述 瑞瑞想要亲自修复在他的一个小牧场周围的围栏。他测量栅栏并发现他需要N#xff08;1≤N≤20,000#xff09;根木板#xff0c;每根的长度为整数Li#xff08;1≤Li≤50,000#xff09;。于是#xff0c;他神奇地买了一根足够长的木板#xff0c;长度为所需的N… 题目描述 瑞瑞想要亲自修复在他的一个小牧场周围的围栏。他测量栅栏并发现他需要N1≤N≤20,000根木板每根的长度为整数Li1≤Li≤50,000。于是他神奇地买了一根足够长的木板长度为所需的N根木板的长度的总和他决定将这根木板切成所需的N根木板。瑞瑞在切割木板时不会产生木屑不需考虑切割时损耗的长度)瑞瑞切割木板时使用的是一种特殊的方式这种方式在将一根长度为x的模板切为两根时需要消耗x个单位的能量。瑞瑞拥有无尽的能量但现在提倡节约能量所以作为榜样他决定尽可能节约能量。显然总共需要切割N-1次问题是每次应该怎么切呢请编程计算最少需要消耗的能量总和。 输入输出格式 输入格式第一行: 整数N表示所需木板的数量 第2到N1行: 每行为一个整数表示一块木板的长度 输出格式一个整数表示最少需要消耗的能量总和 输入输出样例 输入样例#13
8
5
8输出样例#134说明 将长度为21的木板第一次切割为长度为8和长度为13的消耗21个单位的能量第二次将长度为13的木板切割为长度为5和8的消耗13个单位的能量共消耗34个单位的能量是消耗能量最小的方案。 小根堆 1 #includeiostream2 #includecstdio3 #includecstring4 #includecmath5 #includequeue6 #define lli long long int 7 using namespace std;8 void read(lli n)9 {
10 char c;lli x0;lli flag0;
11 while(c0||c9)
12 {
13 cgetchar();
14 if(c-)flag1;
15 }
16
17 while(c0c9)
18 xx*10c-48,cgetchar();
19 if(flag1)n-x;
20 else nx;
21 }
22 priority_queuelli,vectorlli,greaterlli q;
23 lli n,p;
24 lli ans;
25 int main()
26 {
27 read(n);
28 for(int i1;in;i)
29 {
30 read(p);
31 q.push(p);
32 }
33 for(int i1;in-1;i)
34 {
35 lli xq.top();
36 q.pop();
37 lli yq.top();
38 q.pop();
39 xxy;
40 ansx;
41 q.push(x);
42 }
43 coutans;
44 return 0;
45 } 转载于:https://www.cnblogs.com/zwfymqz/p/7044603.html