-
挑战任务
绿盟和各大名企合作,举办编程能力大赛,需要选拔一支参赛队伍。队伍成员全部来自“绿盟杯”中表现优秀的同学,每个同学都根据在比赛中的表现被赋予了一个能力值。现在被召集的
N
个同学已经集结完毕,他们按照编号依次站成了一排。你需要编写一个程序,从这
N
个同学中选出S
个同学,要求选出的同学的能力值的乘积最大,且要求被选出的相邻两个同学的编号的差不超过D
。补全右侧代码区中的
getBestTeams(int n,int a[],int kk, int d)
函数,实现找出能力值乘积最大而且满足编号要求的同学。将最终结果作为返回值返回,函数参数说明如下:int n
召集到的同学的人数int a[]
各个同学的能力值(依次对应不同编号的同学,数组的index
就是学生的编号)int kk
需要选出的同学的人数int d
相邻同学的编号的差的最大值样例1:
输入:3 , [7,4,7] , 2 , 50
输出:
49
int getBestTeams(int n,int kk, int d){
long long f[55][15][2];
long long ans=0;
for(int i=1;i<=n;i++)
{
f[i][1][0]=f[i][1][1]=a[i];
//i表示第几个元素,j表示被选取的第几个元素,k表示选或不选
for(int j=2;j<=kk;++j)
{
for(int k=i-1;k>=max(i-d,1);--k)//添加一个新变量记录i可取值
{
f[i][j][0]=max(f[i][j][0],max(f[k][j-1][0],f[k][j-1][1]));
f[i][j][1]=max(f[i][j][1],max(f[k][j-1][0]*a[i],f[k][j-1][1]*a[i]));
}
}
ans=max(ans,max(f[i][kk][0],f[i][kk][1]));
}
return ans;
}
-
挑战任务
“绿盟杯”比赛过后,赛事承办方的各位工作人员们就开始分头统计各个参赛队伍和同学的成绩了。赛事规模很大,有
10000
个队伍参加。经过工作人员认真负责的统计,本来已经统计好了这一万个队伍的分数和排名,并按照排名从高到低依次进行了编号(从1
到10000
)但是由于一个非常偶然的因素,导致其中三个编号的数据丢失,而且剩余编号的顺序也全被打乱了。你需要编写一个程序,根据还保留的统计数据,来判断哪些编号的数据丢失了,并将这些编号按照从小到大的顺序重新拼接为一个新数字,然后计算这个新数字除以
11
的余数。如丢失了编号为41、17、25
的数据,则最后你需要返回的结果是172541
除以11
的余数。编程要求
补全右侧代码区中的
getLostScores(int num[])
函数,找出丢失的三个编号并按指定格式返回一个新数字除以11
的余数。函数参数说明如下:int nums[]
剩余的被打乱顺序的编号测试说明
样例1:
输入:除15、48、56外的其余9997个数组成的乱序数组
输出:
9
样例2:
输入:除22、76、83外的其余9997个数组成的乱序数组
输出:
5
#include<sstream>
int getLostScores(int num[])
{
int i;
int book[10001];
for(i=0;i<9997;i++)
{
book[num[i]]=1;
}
long long sum=0;
string res="",s;
for(i=1;i<=10000;i++)
{
if(book[i]==0)
{
stringstream ss;
ss<<i;//把i输进ss
ss>>s;//把ss输进s
res+=s;//字符串相加
}
}
stringstream ss(res);//读取res中的单字
ss>>sum;//ss中的值给sum
return sum%11;
}