放球问题(动态规划)——网易2018笔试题

这是一道来自网易2018笔试的放球问题,涉及动态规划策略。给定四种不同质量和数量的球,根据放入篮子后总质量的末位数计算得分。目标是找到放入所有球后的最大分数。通过动态规划公式dp[i][j][k][n]进行状态转移,并利用字符串和unordered_map优化存储,避免使用四维数组。
摘要由CSDN通过智能技术生成

给A、B、C、D四种球,每种球有各自的质量和各自的个数,现在有一个篮子,将球放入篮子会得到相应的分数,分数的计算方法是篮子当前的总质量的末尾数乘以放入球的质量,这样球放入的顺序不同,得到的分数不同,现在要求放入所有球的最大分数。
输入:
1 1 1 1 11 12 13 14
输出:
235

分析:使用动态规划
w = i * weight[0] + j * weight[1] + k * weight[2] + n * weight[3];
令x[m] = (w - weight[m]) % 10 * weight[m];
dp[i][j][k][n] = max( dp[i-1][j][k][n] +x[0], dp[i][j-1][k][n] +x[1], dp[i][j][k-1][n] +x[2], dp[i][j][k][n-1]+ x[3] );
利用string来存储i,j,k,n,和一个unordered_map,避免申请四维数组。

#include <vector>
#include <iostream>
#include <sstream>
#include <algorithm>
#include<unordered_map>
using namespace std;
int fun(vector<int> num, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值