2019阿里暑期实习笔试题个人思路

2019阿里暑期实习笔试题个人思路

### 1、小明是一个数学家,他喜欢用数字给事物命名编号,他给自己编号为1,同时在2019年小明开办了一个农场,准备开始养母猪,他专门给农场的母猪用以下数列2,3,4,5,7,9,12,16,21,28,37,49,65,86,114,151...进行命名。假设农场的母猪永远不会死,小母猪出生后3年后成熟,成熟后从第三年开始每年只会生一只小母猪。第一年农场,有一只刚刚出生的小母猪和一只成熟的母猪(本年不再生小猪,下一年开始生小猪),并给他们编号为2和3。请问,第m只母猪编号为多少?其是哪一年出生的?小明还准备了1份礼物,专门颁给农场第1到m只的母猪颁奖,颁奖规则如下:选出第1到m只的母猪翻转编号(114编号翻转为411)为第k大的母猪进行颁奖,请问是第几只猪获奖?提示: f(n)=f(n-2)+f(n-3)

个人思路:
  1. 斐波那契数列求出小猪列表,注意猪的年龄大等于3的每次循环生一只猪,之前理解需要年龄大于3才可以生小猪,查错好久。
  2. 循环小猪列表,反转编号,进行排序,获取第k大的索引。
  3. 小猪类的成员包含年龄,索引,出生年份,编号,索引是为了第二问,或者第二问另开一个列表保存排序后的小猪列表,然后拿着第k大的小猪去原列表中获取下标索引。

### 2、小明在双十一晚会上抽奖赢得了一次天猫超市免单的机会,享受在一个包裹内最大体积V,最大重量M内免单。假设商品i,体积Vi,重量Mi,库存Si,价格Pi目前天猫超市的商品分为生鲜水产(1)、食品酒水(2),美妆个护(3),居家生活(4)四大类,生鲜水产不与美妆个护同包裹。请你帮助小明在购物车里添置商品使得总价值最大 。

个人思路:
  1. 多维背包问题。
  2. 因为种类的冲突,考虑把冲突的种类分开,做两次动态规划,取其最大值。
  3. 或者再开一个三维数组num[i][v][m],记录dp[i][v][m]数组每种情况生鲜类的装载个数,在添加美妆种类物品时,计算每种dp[i][v][m]最大值时,减去对应的num[i][v][m]个生鲜类物品

备注:题目的用例,取1个第二种物品,5个第三种物品,可以达到36价值,感觉时用例错误

多维背包问题

背包用来装旅游物品,现在共n种(n<=50)旅游物品,每种物品都有体积vi,重量wi,数量ci,价值ti (vi,wi,ci和ti都为整数)。
限制体积最多V立方厘米(V<=1000),重量最多W公斤(W<=500)。

请问你如何选择物品,使得带上的物品总价值最大,这个最大总价值为多少?

比如:
物品编号(i) 体积(V) 重量(M) 数量(num) 价值(price)
1 30 3 10 4
2 50 8 10 5
3 10 2 10 2
4 23 5 8 3
5 130 20 5 11

可以使用dfs加剪枝暴力求解,但是效率感人

使用动态规划求解,状态转移数组dp[i][v][m]表示选取前i种物品,体积为v,重量为m时最大价值

状态转移方程如下:

选取第一种物品时,

dp[1][v][m] = 0																			  v < V[1] || m < M[1]

dp[1][v][m] = min(v/V[1],m/M[1],num[1]) * price[1]			                       	   	  v >= V[1] && m >= M[1]

选取第二种物品到最后一种物品:

dp[i][v][m] = dp[i-1][v][m]								        						   v < V[i] || m < M[i]


dp[i][v][m] = max(dp[i - 1][v][m],dp[i - 1][v - k * V[i]][m - k*M[i]] + k * price[i]))      v >= V[i] && m >= M[i],k表示放入几个该第i种物品

关于多维背包问题的部分,参考https://blog.csdn.net/wenhuayuzhihui/article/details/16354807

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值