https://codeforces.com/contest/1992
A思维题(暴力)
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 2*1e5+10;
int aa[10];
int main()
{
int t;cin>>t;
while(t--)
{
int a,b,c,maxnum=0;
cin>>a>>b>>c;
aa[0]=a,aa[1]=b,aa[2]=c;
for(int i=0;i<=5;i++)
{
for(int j=0;j<=5;j++)
{
for(int k=0;k<=5;k++)
{
if(i+j+k==5)
{
a+=i;
b+=j;
c+=k;
maxnum=max(maxnum,a*b*c);
a=aa[0],b=aa[1],c=aa[2];
}
}
}
}
cout<<maxnum<<endl;
}
}
B思维题、贪心
思路:
- 贪心、所以最大数不拆分,只合并
- 除最大数外,如果等于1,只进行合并,次数=1
- 如果不等于1,即先拆分,次数=数值-1,然后合并,次数=数值
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e5+10;
int a[N];
int main()
{
int t;cin>>t;
while(t--)
{
memset(a, 0, sizeof a);
int len,n;cin>>len>>n;
for (int i = 0; i < n; i ++ )cin>>a[i];
sort(a,a+n);
int cnt=0;
for(int i=0;i<n-1;i++)
{
if(a[i]!=1)cnt=cnt+a[i]-1,cnt=cnt+a[i];
else cnt++;
}
cout<<cnt<<endl;
}
}
C思维题
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e5+10;
int a[N];
int main()
{
int t;cin>>t;
while(t--)
{
int n,m,k;
cin>>n>>m>>k;
for(int i=n;i>=m+1;i--)cout<<i<<" ";
for(int i=1;i<=m;i++)
{
if(i!=m)cout<<i<<" ";
else cout<<i<<endl;
}
}
}