M-Geeker技术竞赛

第一题把数字拆分成三个数字,然后三个数字对应的字符串串起来,然后倒着找不为0的位置,从这个位置倒着开始输出,但是不知道哪里错了,0.85,求告知!
第二题输出abab...cdefg...这样子的字符串就行了,特殊情况判定一下。
第三题用暴力dp了一下,0.7,有没有大佬会做的,教我一下呀!
我是dp[i][cnt]表示当前数字i拆分cnt次能够获得的最大值,dp[i][cnt] = max(dp[j][k]+dp[i-j][cnt-1-k]+j*(i-j))
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;

int s;
long long m;
long long dp[1010][1010];
int main()
{
	cin >> s >> m;
	memset(dp, 0, sizeof dp);
	int cnt;
	for (cnt = 1; cnt < s; cnt++){
		for (int i = 2; i <= s; i++)
			for (int j = 1; j < i; j++)
				for (int k = 0; k < cnt; k++)
					dp[i][cnt] = max(dp[i][cnt], dp[j][k]+dp[i-j][cnt-1-k]+j*(i-j));
		if (dp[s][cnt] >= m) break;
	}		
	if (cnt == s) cout << "-1" << endl;
	else cout << cnt << endl;
	return 0;
}


#笔试题目#
全部评论
你枚举分裂次数的时候,其实只需要考虑i-1和1这样子的合并。这样可以优化掉一层
点赞
送花
回复 分享
发布于 2020-08-03 16:40
第一题考虑全为0的情况,然后留下一个0
点赞
送花
回复 分享
发布于 2020-08-03 16:43
现代汽车中国前瞻数字研发中心
校招火热招聘中
官网直投
第二题感觉挺离谱的。。。阿巴阿巴阿巴阿巴阿巴阿巴阿巴阿巴阿巴阿巴阿巴阿巴............
点赞
送花
回复 分享
发布于 2020-08-03 16:43
第二题是什么思路呀(菜鸡提问)
点赞
送花
回复 分享
发布于 2020-08-03 16:46
:-(,第二题秒懂,我应该再想一会儿不提前交卷的。
点赞
送花
回复 分享
发布于 2020-08-03 17:09
第三题贴一个fdu数学系大佬的思路吧,不过这个也没有直接解出这道题
点赞
送花
回复 分享
发布于 2020-08-04 10:47
为啥我就收不到m-geeker的技术竞赛的笔试通知?难道我的简历都看不上吗
点赞
送花
回复 分享
发布于 2020-08-10 00:12

相关推荐

点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务