对该代码优化#include<bits/stdc++.h> using namespace std; const int MAXN=10000; int t[MAXN],c[MAXN],n; int msum(int zhong) { int sum=0; for(int i=0;i<n;i++) if(t[i]>=zhong) sum+=c[i]*(t[i]-zhong); return sum; } int main() { int m,k,tmax=0,top,bas,zhong,sum,sumi; cin>>n>>m>>k; for(int i=0;i<n;i++) cin>>t[i]>>c[i]; for(int i=0;i<n;i++) if(t[i]>tmax) tmax=t[i]; top=tmax; bas=k; zhong=(bas+top)/2; while(bas<top) { sum=msum(zhong); //cout<<sum<<" "<<m<<" "<<zhong<<endl; if(sum<m) { top=zhong-1; } else { bas=zhong+1; } zhong=(bas+top)/2; } sumi=zhong+1; for(int i=0;i<3;i++) { if(msum(zhong-i)<=m) sumi=zhong; } if(k>=sumi) sumi=k; cout<<sumi; return 0; }
时间: 2023-06-26 09:10:14 浏览: 245
C++代码优化方案.
这个代码的问题在于使用了`#include<bits/stdc++.h>`这样的万能头文件,虽然方便了编写,但是会导致编译时间变长,同时也会引入不必要的头文件,造成一定的资源浪费。应该根据需要只包含必要的头文件。
另外,可以考虑使用二分查找算法进行优化。在二分查找的过程中,可以根据当前中间值计算出对应的花费总和,如果花费总和小于给定的值,则更新上限;如果花费总和大于等于给定的值,则更新下限。在循环结束后,可以根据题目要求再对结果进行微调。
以下是优化后的代码:
阅读全文