阿里笔试求助

题目大概是这个意思
1.有一个数组的数组(每个数组长度不定),然后每次只能从一个数组两端取值,取完就没了,一共取N次,问总共取的最大值是多少?

来个大佬救救我,就没一个人做出来吗?

全部评论
第二题分组背包,提前算好每一行恰好得到k个物品的最大价值。
6 回复 分享
发布于 2020-07-27 20:44
分享下我的思路叭,时间不够没写完,没有验证对不对。首先对于每一层,问题转化为取m个连续值,使得对于每一个m,连续值的总和最大(连续值就是最后留下来的收藏品),用前缀和和后缀和来做,返回一个map,key是拿走的收藏品数,value是拿走的收藏品价值,最后一共有n个map,再对其进行dfs,剪枝策略是当前value要小于历史最佳结果且剩余的待分析map的size总和加上当前已选取的收藏品数量要小于m
1 回复 分享
发布于 2020-07-27 20:21
第一题 import java.util.Scanner; public class Main {     public static void main(String[] args) {         Scanner scanner = new Scanner(System.in);         int n = scanner.nextInt();         for(int i = 0;i<n;i++){             int length = scanner.nextInt();             int arr[] = new int[length];             for(int j = 0;j<length;j++){                 arr[j] = scanner.nextInt();             }             String res = play(arr);             System.out.println(res);         }     }     private static String play(int []array){         String result = "NIUMEI";         if(array.length%2!=0)             return "NIUNIU";         else {             for(int i = 0;(i+1)<array.length;i+=2){                 //仅数字成对出现时,输出NIUMEI。                 if((array[i]^array[i+1])!=0){                     return "NIUNIU";                 }             }         }         return result;     } } 第二题暴力没过。。。
1 回复 分享
发布于 2020-07-27 20:15
两个20%
1 回复 分享
发布于 2020-07-27 20:03
第一题没读懂…第二题10%
点赞 回复 分享
发布于 2020-07-28 15:46
我不知道我理解题意对不对,我想的是弄一个新类记录每个物品所在位置以及价值,我就把所有层头尾两个数放到大根堆(按价值排序)里,完了每次把顶上的值拿出来,按照他的位置去把他后面或者前面新暴露出来的点放进去,一直做M次,这样,请做过的大佬指点一下,谢了。
点赞 回复 分享
发布于 2020-07-28 09:49
第二题用多重背包ac了
点赞 回复 分享
发布于 2020-07-28 08:50
找一个长度为m—N的窗口,让窗口中的值和最小,剩下的和就最大了
点赞 回复 分享
发布于 2020-07-28 08:07
感觉是不是leetcode的那个戳气球类似的思路?
点赞 回复 分享
发布于 2020-07-27 21:42
第二题是不是要动规来做 假设dp[i,M]表示第i行,总共取M个得到的最大值 val[i,k]表示对第i行,从两端取k个元素的最大值 那么 dp[i,M] = max{    dp[i-1,0] + val[i,M]   , dp[i-1,1] + val[i,M-1] , …… ,dp[i-1,M] + val[i,0]} dp[N,M]就是最后的答案
点赞 回复 分享
发布于 2020-07-27 20:44
大佬们,能告诉我,这个IO有什么问题吗,为什么总是数据读入错误?  int main(){      int n,m,a,x;      cin >> n;      cin >> m;     x = n;     vector<vector<int>> v;      while(x-- > 0){      vector<int> tmp;      while(cin >> a)       tmp.push_back(a)    v.push_back(tmp);    }    solve(v,n,m);                                                                                                         } 输入数据: 2 3 2 3 2 4 1 4 1 5
点赞 回复 分享
发布于 2020-07-27 20:22
谁能发一下完整的题目?
点赞 回复 分享
发布于 2020-07-27 20:22
第二题应该要dp,先对单层dp,在一层一层往下dp,复杂度大概10^6,有思路没写完,裂开……
点赞 回复 分享
发布于 2020-07-27 20:21
在线蹲一个python第一题代码
点赞 回复 分享
发布于 2020-07-27 20:21
是国王收藏柜吗? 😂我思路是每次取所有两端的最大值,然后删除这个值,但是没写完,0%😂崩了
点赞 回复 分享
发布于 2020-07-27 20:18
第二题双指针应该行,但是写完已经自动交卷了,难受啊
点赞 回复 分享
发布于 2020-07-27 20:18
第二题时间不够了,忘记点提交本题型了😂,这个自动交卷的时候会帮我提交一次吗?有朋友知道嘛?第一题貌似只要从大到小扫描每个数字出现次数的奇偶
点赞 回复 分享
发布于 2020-07-27 20:15
求第一题和第二题思路
点赞 回复 分享
发布于 2020-07-27 20:14
我有个思路,但是时间不够没试,就是对每一层按照取值从大到小排列,然后每次搜索n层第一个值最大的,选完删除,一直选到需要的个数
点赞 回复 分享
发布于 2020-07-27 20:14

相关推荐

强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
评论
7
12
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务