9.7 顺丰笔试 AC代码
第一题,求递归次数,动态规划,dp[i] = dp[i-1] + dp[i-2] + dp[i-3] +1,初始状态dp[1],dp[2],dp[3]都为1,注意越界,每次对1e9+7取余。
第二题,构造试卷,贪心算法,将数组排序,取最大的m个用来作为构成试卷,其他的题用来给不够的题“替补”,让构成试卷的m个数的最小值尽可能的大,最终的结果就是m个数的最小值。
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin>>n>>m;
vector<int> nums(n);
for(int i = 0; i < n; ++i) {
cin>>nums[i];
}
sort(nums.begin(), nums.end());
long long cur = 0;
for(int i = 0; i < (n-m); ++i) {
cur += nums[i];
}
int start = n-m;
int j;
for(j = start; j < n-1; ++j) {
if( (long long)(nums[j+1] - nums[j])*(j - start + 1) <= cur) {
cur -= (long long)(nums[j+1] - nums[j])*(j - start + 1);
}
else {
break;
}
}
if(j < n-1) {
cout<<nums[j] + (cur)/(j-start+1) <<endl;
}
else {
cout<<nums[j] + (cur)/m <<endl;
}
return 0;
} 
查看30道真题和解析