给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,