Contest2670 - 2021ACM俱乐部后备营个人训练赛第11场
问题 B: 装箱问题
思路
动态规划入门题
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int m,n,i,j;
int f[200000];
int w[35];
cin>>m>>n;
for(i=1;i<=n;++i)
cin>>w[i];
for(i=1;i<=n;++i)
{
for(j=m;j>=w[i];--j)
//由于最后要算剩余的,所以从大的开始算
{
if(f[j]<f[j-w[i]]+w[i])//判断剩余箱子容量大于0
{
f[j]=f[j-w[i]]+w[i];
}
}
}
cout<<m-f[m]<<endl;
//最后用箱子容量减去最大可装载的重量,即剩余的容量
return 0;
}
问题 C: 最大公约数和最小公倍数问题
思路
有个性质:x(最大公约数)*y(最小公倍数) = P * Q
看题就知道,肯定得先求求它的最大公约数,写成函数求的,最后再依次枚举即可
代码
#include <bits/stdc++.h>
using namespace std;
int yue(int a,int b)
{
int maxx=max(a,b);
int minx=min(a,b);
if(maxx%minx==0)
return minx;
else
return yue(minx,(maxx%minx));
}
int main()
{
int x,y;
int count=0;
cin>>x>>y;
for(int i=x;i<=y;++i)
{
if(x*y%i==0 && yue(i,x*y/i)==x)
++count;
}
cout<<count;
return 0;
}
问题 D: 数的计算
思路
可直接打表(写几组数组你就知道了),也可以算是动态规划叭
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,a[1005];
cin>>n;
for(int i=1;i<=n;++i){
for(int j=1;j<=i/2;++j)//最多拆分成本身的一半
a[i] += a[j];
++a[i];//加上本身
}
cout<<a[n];
return 0;
}
/*
1 2 3 4 5 6 7 8 9
1 2 2 4 4 6 6 10 10
*/
问题 E: 班级对抗
思路
水题,用用数组就行
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,a[1000],m,b[1000];
int ansa=0,ansb=0;
cin>>n;
for(int i=0;i<n;++i){
cin>>a[i];
ansa += a[i];
}
cin>>m;
for(int i=0;i<m;++i){
cin>>b[i];
ansb += b[i];
}
if(ansa>ansb)
{
cout<<"A"<<endl;
cout<<ansa<<" "<<ansb;
}
else
{
cout<<"B"<<endl;
cout<<ansa<<" "<<ansb;
}
return 0;
}
问题 F: 彩票中奖
思路
水题,数组,选择判断
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[7],b[7];
int qian=0,hou=0;
for(int i=0;i<7;++i)
cin>>a[i];
for(int i=0;i<7;++i)
cin>>b[i];
for(int i=0;i<5;++i)
for(int j=0;j<5;++j)
if(a[i]==b[j])
++qian;
for(int i=5;i<7;++i)
for(int j=5;j<7;++j)
if(a[i]==b[j])
++hou;
if(qian==5&&hou==2)
cout<<"5000000";
else if(qian==5&&hou==1)
cout<<"250000";
else if(qian==5&&hou==0 || qian==4&&hou==2)
cout<<"3000";
else if(qian==4&&hou==1 || qian==3&&hou==2)
cout<<"200";
else if(qian==4&&hou==0 || qian==3&&hou==1 || qian==2&&hou==2)
cout<<"10";
else if(qian==3&&hou==0 || qian==1&&hou==2 || qian==2&&hou==1 || qian==0&&hou==2)
cout<<"5";
else
cout<<"0";
return 0;
}
问题 I: Iroha and Haiku I
思路
简单判断,水题
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b>>c;
if(a==5&&b==5&&c==7 || a==5&&b==7&&c==5 || a==7&&b==5&&c==5 || a==5&&b==7&&c==5)
cout<<"YES";
else
cout<<"NO";
return 0;
}
问题 J: Iroha Loves Strings II
思路
给N个串,每串长度为L,将这n个串按最小字典序连接起来
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,l;
string s[101];
while(cin>>n>>l)
{
for(int i=0;i<n;++i)
cin>>s[i];
sort(s,s+n);
for(int i=0;i<n;++i)
cout<<s[i];
cout<<endl;
}
return 0;
}