题目:求最小的最大值以及最大的最大值
分析:最大的最大值一定是最大的ai+m(易得)
最小的最大值分两种情况:
1.sum>=m(sum为ai相较于最大的ai的差值和),此时最小的最大值为当前ai的最大值
2.sum
#include
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int n;
int m;
cin>>n>>m;
int a[105];
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1,cmp);
int sum=0;
for(int i=2;i<=n;i++)
{
sum+=a[1]-a[i];
}
if(sum>=m)
cout<=m)
cout<
水题,记录后遍历所有组合即可
#pragma GCC optimize(2)
#include
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define line cout<<"-----------------"< mp;
mp["A"] = INF;
mp["B"] = INF;
mp["C"] = INF;
mp["AB"] = INF;
mp["AC"] = INF;
mp["BC"] = INF;
mp["ABC"] = INF;
for(int i=0; i> s;
sort(s.begin(), s.end());
mp[s] = min(mp[s], v);
}
int ans = INF;
ans = min(mp["A"] + mp["B"] + mp["C"], ans);
ans = min(mp["A"] + mp["BC"], ans);
ans = min(mp["B"] + mp["AC"], ans);
ans = min(mp["C"] + mp["AB"], ans);
ans = min(mp["AB"] + mp["AC"], ans);
ans = min(mp["BC"] + mp["AC"], ans);
ans = min(mp["AB"] + mp["BC"], ans);
ans = min(mp["ABC"], ans);
if(ans < 0 || ans >= INF) ans = -1;
cout << ans << endl;
}
return 0;
}
不难,但是不太好写,大约分7种情况讨论,情况考虑全了也就过了
#include
#include
#include
#include
#include
#include
#include
#include