阿里技术笔试-染色问题讨论

第二题染色问题,有人做出来了吗?有思路,但是太难写了吧#阿里实习##阿里巴巴#
全部评论
好奇第一题怎么做。。第一次做国内公司的面试,感觉是简单的数学但就是没想出来。
点赞 回复 分享
发布于 2020-04-10 10:03
感觉是回溯,没写完
点赞 回复 分享
发布于 2020-04-10 10:05
两题都是没做出来 好难
点赞 回复 分享
发布于 2020-04-10 10:08
我第一题也是用的中位数,但是只对了80%的测试😂
点赞 回复 分享
发布于 2020-04-10 10:13
第二题回溯只有给的用例能通过,,应该是超时了,忘了剪枝。
点赞 回复 分享
发布于 2020-04-10 10:25
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> using namespace std; typedef long long LL; const int maxn = 5010; int t, n, m, c, flag = 0; int l[maxn], cnt[maxn], mp[8][8]; void dfs(int x, int y) {   //printf("%d %d\n", x, y);   if (x == n && y == m + 1) {     flag = 1;     return;   }   for (int i = 0; i < c; i++) {     if (flag == 1) break;     if (i != mp[x - 1][y] && i != mp[x][y - 1] && cnt[i] < l[i]) {       mp[x][y] = i;       cnt[i]++;       if (x != n && y == m) dfs(x + 1, 1);       else dfs(x, y + 1);       cnt[i]--;       mp[x][y] = -1;     }   } } int main() {   scanf("%d", &t);   while (t--) {     memset(mp, -1, sizeof mp);     flag = 0;     scanf("%d %d %d", &n, &m, &c);     for (int i = 0; i < c; i++) {       scanf("%d", &l[i]);     }     dfs(1, 1);     printf("%s\n", flag == 1?"YES":"NO");   }   return 0; }
点赞 回复 分享
发布于 2020-04-10 10:27

相关推荐

投递CVTE等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务