P2094 运输

https://www.luogu.com.cn/problem/P2094
涉及知识点:贪心,排序
黄色题
 
思路:
贪心策略:

首先贪心策略是每次选当前最大的两个数合并,直到只剩最后一件物品。

我看写题解的人都没写为什么这样的贪心是正确的,那我就来一发证明吧。

我们发现越先选的数被kk除的次数也就越多,为了使结果尽可能小,肯定是让越大的数除kk的次数越多越好,自此,贪心策略证明完毕。

(每除完都要进行一次排序,保证最大)


 

 

复制代码
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string> using namespace std; int comp(const int&a,const int&b) { return a>b;//定义从大到小排序的函数 } void add(int x[],int y,int n); int main() { int n,k,j,l; scanf("%d%d",&n,&k); int a[10001]; for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a+0,a+n,comp);//从大到小排序 for(int i=1;i<n;i++) { a[i]=(a[i-1]+a[i])/k;//每次将最大的两项进行处理 a[i-1]=0;//倒数第二项清零 j=i+1; l=i; while(a[j]>a[l]&&j<n)//将未清零的数进行一遍冒泡排序 { int b=a[j]; a[j]=a[l]; a[l]=b;//交换值 j++; l++;//冒泡排序的两项往后推一位 } } printf("%d",a[n-1]);//a数组最后一项即为结果 return 0;
复制代码

 


__EOF__

本文作者灰の魔女伊蕾娜
本文链接https://www.cnblogs.com/2elaina/p/16481756.html
关于博主:编程小萌新一名,希望从今天开始慢慢提高,一步步走向技术的高峰!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   -イレイナ  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示