刚结束的顺丰笔试第二题,也没太想明白,想请各位大佬指点一下

旅游购物
放暑假了,小明想出去好好旅游一趟。他制定了一个旅游路线,他想去n个地方旅游
并且严格按照制定的顺序依次旅游。每到一个地方小明可以买 当地的特色物品,小明的开心值会因为购买物提升ai,但是也会因为发现购买的物品其实没那么好而降低ai的开心值。如果某个时刻小明的开心值低于0,他会很愤怒并且终止旅行。你可以帮助小明合理购物,从而在旅行结束时购买最多数量的物品吗。起始开心值为0.

输入描述:
第一行一个整数n, 1<=n<=200000
第二行个整数,从左到右表示小明旅游路线上每个地方特色物品可以提供的开心值。负数表示降低开心值
任意数字大小范围是[-1000000000,1000000000]

样例输入
6
4 -4 1 -3 1 -3

样例输出
5

提示
购买第1 3 4 5 6个物品
#笔试题目##顺丰科技#
全部评论
同学的AC代码是用贪心+优先队列(小根堆)做的,从头开始每个物品都拿并计算快乐值,并加入优先队列,当前拿的物品数加1,并判断当前快乐值是否小于0,当当前快乐值小于0时,不断弹出当前优先队列内堆顶元素,(相当于腾出背包空间),同时当前拿的物品数减1,直到快乐值大于0时,继续往下选。
8 回复 分享
发布于 2021-09-06 23:09
两题都不会
2 回复 分享
发布于 2021-09-06 21:49
不知道行不行(测试案例能过),难顶
2 回复 分享
发布于 2021-09-06 21:59
第二题,每次变负数了就淘汰最小的数就行了 private static void solve(int n, int[] arr) {         PriorityQueue<Integer> q = new PriorityQueue<>();         int sum = 0;         int cnt = 0;         for (int i = 0; i < n; i++) {             sum += arr[i];             q.add(arr[i]);             cnt += 1;             if (sum < 0 ) {                 int tmp = q.poll();                 sum -= tmp;                 cnt -= 1;             }         }         System.out.println(cnt);     }
2 回复 分享
发布于 2021-09-07 14:34
两个题都属于那种看着不难,一开始写就写不出来
1 回复 分享
发布于 2021-09-06 22:46
第一题: public class Main09061 {     public static void main(String[] args) {         Scanner scanner = new Scanner(System.in);         int n = scanner.nextInt();         int  count=0;         for(int i=0;i<n;i++){             int aim = scanner.nextInt();             if(fun(aim)){                 count++;             }         }         System.out.println(count);     }     private static boolean fun(int aim) {         for(int i=0;i*111<=aim;i++){             if((aim-i*111)%11==0){                 return true;             }         }         return false;     } }
1 回复 分享
发布于 2021-09-06 23:00
可以搜一下 力扣魔塔游戏 几乎原题
1 回复 分享
发布于 2021-09-06 23:48
蹲一个答案!
点赞 回复 分享
发布于 2021-09-06 21:44
等答案。。。
点赞 回复 分享
发布于 2021-09-06 21:47
第一题有没有大佬给下答案
点赞 回复 分享
发布于 2021-09-06 21:49
感觉是dp,我递归随便暴力拿了几分🌝🌝🌝
点赞 回复 分享
发布于 2021-09-06 21:53
第一题有好办法吗
点赞 回复 分享
发布于 2021-09-06 22:12
也不知道0.45能过笔试不能
点赞 回复 分享
发布于 2021-09-06 22:13
dp吧,类似最长上升子序列
点赞 回复 分享
发布于 2021-09-06 22:23
等一个大佬的答案
点赞 回复 分享
发布于 2021-09-06 22:35
typedef long long ll; int main() {     int n;     cin >> n;     vector<int> hap(n, 0);     for (int i = 0; i < n; i++) {         cin >> hap[i];     }          vector<ll> dp(n + 1, 0);     int max_bag = 0;     for (int i = 0; i < n; i++) {         if (hap[i] >= 0) {             max_bag++;             for (int j = max_bag; j >= 1; j--) {                 dp[j] = max(dp[j - 1] + hap[i], dp[j]);             }         }         else {             if (dp[max_bag] + hap[i] >= 0) {                 max_bag++;             }             for (int j = max_bag; j>=1; j--) {                 dp[j] = max(dp[j - 1] + hap[i], dp[j]);             }         }         //cout << max_bag << ' &(5528)#39; << dp[max_bag] << endl;     }     cout << max_bag << endl;     return 0; }
点赞 回复 分享
发布于 2021-09-06 22:52
输出n-1,骗了27😂
点赞 回复 分享
发布于 2021-09-07 11:44
排序然后从后向前会tle吗
点赞 回复 分享
发布于 2021-09-07 11:50
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Shuifeng01 {     static int res=0;     public static void main(String[] args) throws IOException {         BufferedReader br= new BufferedReader(new InputStreamReader(System.in));         int n= Integer.parseInt(br.readLine());         String[] s = br.readLine().split(" ");         int[] nums= new int[n];         for (int i = 0; i < n; i++) {             nums[i]=Integer.parseInt(s[i]);         }                  dfs(nums,0,0,0);         System.out.println(res);     }          // index 当前所在的城市,kaixin 当前的开心值,buyNums 当前购买的礼品数     private static void dfs(int[] nums,int index,int kaixin,int buyNums){         if(index==nums.length){             if(kaixin>=0){                 res=Math.max(res,buyNums);             }             return ;         }         // 买         dfs(nums,index+1,kaixin+nums[index],buyNums+1);         // 不买         dfs(nums,index+1,kaixin,buyNums);     } }
点赞 回复 分享
发布于 2021-09-07 18:01

相关推荐

沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
我已成为0offer的糕手:别惯着,胆子都是练出来的,这里认怂了,那以后被裁应届被拖工资还敢抗争?
点赞 评论 收藏
分享
2 16 评论
分享
牛客网
牛客企业服务