2022-01-26:最优账单平衡。
一群朋友在度假期间会相互借钱。比如说,小爱同学支付了小新同学的午餐共计 10 美元。如果小明同学支付了小爱同学的出租车钱共计 5 美元。我们可以用一个三元组 (x, y, z) 表示一次交易,表示 x 借给 y 共计 z 美元。用 0, 1, 2 表示小爱同学、小新同学和小明同学(0, 1, 2 为人的标号),上述交易可以表示为 [[0, 1, 10], [2, 0, 5]]。
给定一群人之间的交易信息列表,计算能够还清所有债务的最小次数。
注意:
一次交易会以三元组 (x, y, z) 表示,并有 x ≠ y 且 z > 0。
人的标号可能不是按顺序的,例如标号可能为 0, 1, 2 也可能为 0, 2, 6。
力扣465。

答案2022-01-26:

状态压缩的动态规划。

代码用golang编写。代码如下:

package mainimport "fmt"func main() {trans := [][]int{{0, 1, 10}, {1, 0, 1}, {1, 2, 5}, {2, 0, 5}}ret := minTransfers2(trans)fmt.Println(ret)
}func minTransfers2(transactions [][]int) int {debt := debts(transactions)fmt.Println(debt)N := len(debt)sum := 0for _, num := range debt {sum += num}dp := make([]int, 1<<N)for i := 0; i < 1<<N; i++ {dp[i] = -1}return N - process2(debt, (1<<N)-1, sum, N, dp)
}func process2(debt []int, set, sum, N int, dp []int) int {if dp[set] != -1 {return dp[set]}ans := 0if (set & (set - 1)) != 0 {value := 0max := 0for i := 0; i < N; i++ {value = debt[i]if (set & (1 << i)) != 0 {max = getMax(max, process2(debt, set^(1<<i), sum-value, N, dp))}}ans = twoSelectOne(sum == 0, max+1, max)}dp[set] = ansreturn ans
}func debts(transactions [][]int) []int {map0 := make(map[int]int)for _, tran := range transactions {map0[tran[0]] += tran[2]map0[tran[1]] -= tran[2]}N := 0for _, value := range map0 {if value != 0 {N++}}debt := make([]int, N)index := 0for _, value := range map0 {if value != 0 {debt[index] = valueindex++}}return debt
}func getMax(a, b int) int {if a > b {return a} else {return b}
}func twoSelectOne(c bool, a, b int) int {if c {return a} else {return b}
}

执行结果如下:


左神java代码

2022-01-26:最优账单平衡。 一群朋友在度假期间会相互借钱。比如说,小爱同学支付了小新同学的午餐共计 10 美元。如果小明同学支付了小爱同学的出租车钱共计 5 美元。我们可以用一个三元组 (x相关推荐

  1. 小学奥数 7657 连乘积末尾0的个数-2022.01.26

    http://noi.openjudge.cn/math/7657/ /* 小学奥数 7657 连乘积末尾0的个数-2022.01.26 http://noi.openjudge.cn/math/76 ...

  2. 2022.01.26翻译Watermelon

    Watermelon 题目(https://acs.jxnu.edu.cn/problem/CF4A)描述: One hot summer day Pete and his friend Billy ...

  3. 2022款联想yoga16s和联想小新pro16的区别 联想yoga16s和联想小新pro16哪个好

    联想yoga16s的屏幕为500尼特的亮度,支持触控功能,小新pro16的屏幕亮度为300尼特,不支持触控功能,相比之下,这款联想yoga16s的屏幕更好些. 做工的区别:联想yoga16s的机身做工 ...

  4. 联想小新15用什么C语言程序,长处更长 优点更优 联想小新Air 15 2019首测

    原标题:长处更长 优点更优 联想小新Air 15 2019首测 15.6英寸笔记本有以下几点优势:一是屏幕更大,视觉体验更好:二是键盘区可以容纳右侧独立数字键盘,对于经常需要用到数字按键的朋友来说非常 ...

  5. 联想小新pro16和联想小新pro14 2022款哪个好

    1.屏幕区别:小新Pro14是14英寸,2.8k分辨率,小新Pro16是16英寸,2.5k分辨率: 2.处理器区别:小新Pro14搭载了i5 12500h处理器,小新Pro16有i5 12500h.i ...

  6. 用c语言编辑欢迎新同学,开学标语欢迎新同学精选100句

    快乐假期要过去,开学那是必须的,学校里面风光美,微风绿树书香气,书中自有黄金屋,智慧迎来颜如玉,万物唯有读书高,开学日愿你快快乐乐上学去,好好学习天.今天小编就给大家整理了开学标语欢迎新同学,希望对大 ...

  7. 《安富莱嵌入式周报》第249期:2022.01.17--2022.01.23

    往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - P ...

  8. 2022.06.26 华为od机试真题

    华为od机试真题 1.最长连续子串 2.正方形数量 3.二叉树层次遍历(不会做) 1.最长连续子串 有N个正整数组成的一个序列给定一个整数sum求长度最长的的连续子序列使他们的和等于sum返回次子序列 ...

  9. 2022 . 11 . 26 测试赛解题报告

    2022 . 11 . 26测试赛 [USACO21DEC] Lonely Photo B 题目描述 Farmer John 最近购入了 NNN 头新的奶牛(3≤N≤5×1053 \le N \le ...

最新文章

  1. PKI/CA 技术的介绍
  2. 关于ASP.NET页面打印技术的总结
  3. 六周第四次课(1月18日)
  4. Leetcode-937-Reorder Log Files-(Easy)
  5. new Date('2014/04/30') 和 new Date('2014-04-30') 的区别
  6. 如何架设自己的 SAP UI5 资源服务器
  7. 基于Java+jsp+servlet的养老院管理系统设计和实现《收藏版》
  8. Protobuffer教程
  9. 约瑟夫环c语言程序完整版,约瑟夫环的C语言实现
  10. InfoGAN原理PyTorch实现Debug记录
  11. 熟悉scrapy的基本使用(创建与运行,目录结构)---爬虫项目
  12. 最近做的一些文件破解的结果
  13. 从前慢-深入理解JVM-篇章1
  14. maven安装以及本地创库设置
  15. 模拟夜间灯光-科目三-灯光口令(9选5)
  16. 构建SaaS化平台产品的建议
  17. Win11玩不了红警怎么办?Win11玩不了红警解决方法分享
  18. sql语句练习题,答案
  19. 响应式设计的三个步骤
  20. UTXO:未使用的交易输出

热门文章

  1. After Effects Duik: Rigging Animation Tools After Effects 的绑定与动画工具 Duik插件 Lynda课程中文字幕
  2. 黑马探花交友----5.聊天消息-即时通讯
  3. 【FFmpeg】avg_frame_rate 计算 及在TS 中使用
  4. 计算机网络第1章(概述)- 湖科大计算机网络课程笔记整理
  5. 【附源码】计算机毕业设计java羽毛球场地管理系统设计与实现
  6. H5无插件播放rtsp视频流
  7. 大数据存储项目-基于Flink的高速公路ETC入深圳数据实时分析平台
  8. android入门之broadcast
  9. 边缘设备、系统及计算杂谈(16)——Apache学习
  10. 承接WEB应用开发、软件开发、网站开发