https://leetcode.com/problems/bag-of-tokens/

一开始觉得应该是个dp 题,把所有结果搜出来然后max 一下。实现以后发现组合太多了,非常慢,即使加上memorization 也是TLE

var hash = function(arr, p, s) {
arr = arr.sort();
return arr.reduce((p, c)=>p+"-"+c, "") + "_" + p + "_" + s;
}
let m = {};
var iter = function(tokens, p, s) {
if (tokens.length == 0) return s;
let h = hash(tokens, p, s);
if (m[h] != void 0) return m[h];
let result = s;
for (let i = 0; i < tokens.length; ++i) {
//option1, if we have at leaset token[i] power
if (p >= tokens[i]) {
result = Math.max(result, iter(tokens.filter((x,k)=>k!=i), p-tokens[i], s+1));
} //option2, if we have at least 1 point
if (s >= 1) {
result = Math.max(result, iter(tokens.filter((x,k)=>k!=i), p+tokens[i], s-1));
}
}
m[h] = Math.max(result, m[h]||0);
return result;
} var bagOfTokensScore = function(tokens, P) {
return iter(tokens, P, 0);
};

看了答案发现是用greedy,然而也没有证明为啥greedy 就是最优解。

最新文章

  1. 生成ARM汇编
  2. wpf,能够复制文字 及自动识别URL超链接的TextBlock
  3. 【java基础学习】线程
  4. terminator终端工具
  5. Caffe学习系列(19): 绘制loss和accuracy曲线
  6. RequireJS示例
  7. linux下mysql开启慢查询
  8. MSSQL 2005数据库与SP4补丁安装
  9. asp.net Post Get提交数据转Model实例
  10. Intersecting Lines - POJ 1269(判断平面上两条直线的关系)
  11. SGU 194 Reactor Cooling
  12. Linux设置PHP环境变量
  13. ★Linux命令行操作技巧(作为服务器端)
  14. hdu 1130 How Many Trees?(Catalan数)
  15. varnish 相关说明
  16. IDEA添加Git项目
  17. Android平台下利用zxing实现二维码开发
  18. cocosCreater开发时遇到的问题
  19. Smali插桩打日志
  20. mongoDB(Linux)

热门文章

  1. qt 视频播放器错误解决方法
  2. 微信小程序中-折线图
  3. cucumber测试项目报错
  4. shell 生成文件统计信息
  5. css 修改placeholder的颜色
  6. python中的图像数据库PIL
  7. mysql数据库 删除某几个字段相同的重复记录并根据另一字段留下一条记录
  8. MongoDB代码——Python篇
  9. pyQt5不让进度条卡住
  10. 软件测试自动化…python学习到什么程度?代码好不好学!