Going Dutch BAPC( 状态转移DP)

题目描述

You and your friends have just returned from a beautiful vacation in the mountains of the Netherlands. When on vacation, it’s annoying to split the bill on every expense every time, so you just kept all the receipts from the vacation, and wrote down who paid how much for who. Now, it is time to settle the bill.
You could each take all the receipts showing that someone paid something for you, and then pay that person back. But then you would need a lot of transactions, and you want to keep up the lazy spirit from your trip. In the end, it does not matter who transfers money to whom; as long as in the end, everyone’s balance is 0.
Can you figure out the least number of transactions needed to settle the score? Assume everyone has enough spare cash to transfer an arbitrary amount of money to another person.

输入

Input consists of
• A line containing two integers M, the number of people in the group, with 1 ≤ M ≤ 20,and N, the number of receipts from the trip, with 0 ≤ N ≤ 1000.
• N lines, each with three integers a, b, p, where 0 ≤ a, b < M, and 1 ≤ p ≤ 1000,signifying a receipt showing that person a paid p euros for person b.

输出

Output a single line containing a single integer, the least number of transactions necessary to settle all bills.

样例输入

4 2
0 1 1
2 3 1

样例输出

2
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1<<20;
int sum[20],a[maxn],b[maxn];
int main()
{int i,j,k,m,n;cin>>m>>n;memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(sum,0,sizeof(sum));while(n--){cin>>i>>j>>k;sum[i]+=k;sum[j]-=k;}for(i=0; i<(1<<m); i++)for(j=0; j<m; j++)if(i&(1<<j))b[i]+=sum[j];for(i=0; i<(1<<m); i++){for(j=0; j<m; j++)if(!(i&(1<<j))){if(!b[i|(1<<j)])a[i|(1<<j)]=max(a[i|(1<<j)],a[i]+1);elsea[i|(1<<j)]=max(a[i|(1<<j)],a[i]);}}cout<<m-a[(1<<m)-1]<<endl;return 0;
}

这是我接触到的第一道状态转移DP,可能这题真的很水,但我在今晚之前连位运算都不知道是啥!

转载于:https://www.cnblogs.com/nublity/p/8763621.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查询指定目录下的文件中是否包含指定字符串

cd /etc/apache2/site-enable/rep -rl test.com ./*意为查询apache虚拟主机中是否包含test.com的域名转载于:https://blog.51cto.com/linuxtips/1773938

使用 C# 编程对RTF文档的支持

http://www.68design.net/Development/Aspnet/Basis-AspNet/26011-1.html 转载于:https://www.cnblogs.com/faxian/p/4402910.html

algorand共识协议_【Filecoin】理解预期共识 - 及它的优缺点

摘 要预期共识就是上帝掷飞镖预期共识的优点在于简单&#xff0c;而且每一次选举胜出者数量的平均数为1但预期共识不能保证每次选举的胜出者数量&#xff0c;这是其最大的问题期待有更好的基于可验证随机函数的共识算法出现&#xff0c;设计者可获得20万美金奖赏预期共识 就是 …

Android软件安全与逆向分析之Dalvik

注意点 首先&#xff0c;让我们来思考下面几个问题&#xff1a; 什么是Dalvik虚拟机? Dalvik VM与JVM有什么区别&#xff1f; Dalvik VM有什么新的特点&#xff1f; Dalvik VM的架构是怎么样的&#xff1f; 首先&#xff0c;我得承认第一个问题问得很傻&#xff1a;什么是Dalv…

在java中实现日期类型和字符串类型的转换大全(Date String Timestamp Datetime)

用Timestamp来记录日期时间还是很方便的&#xff0c;但有时候显示的时候是不需要小数位后面的毫秒的&#xff0c;这样就需要在转换为String时重新定义格式。 Date、String、Timestamp之间的转换&#xff01; [java] view plaincopyprint? public static void main(String[] ar…

c++ 多个线程操作socket要同步吗_基础知识深化:NIO优化原理和Tomcat线程模型

1、I/O阻塞书上说BIO、NIO等都属于I/O模型&#xff0c;但是I/O模型这个范围有点含糊&#xff0c;我为此走了不少弯路。我们日常开发过程中涉及到NIO模型应用&#xff0c;如Tomcat、Netty中等线程模型&#xff0c;可以直接将其视为 网络I/O模型 。本文还是在基础篇章中介绍几种I…

Http中的同步请求和异步请求

最近在上springmvc的JSON数据交换的时候&#xff0c;老师下课提了一个课后问题&#xff1a;什么是异步请求&#xff1f;什么是同步请求&#xff1f;我想大部分同学听到这个问题的时候应该和我一样不知所云。现在&#xff0c;给大家分享一篇关于同步请求和异步请求的小知识。举个…

Linux常用命令汇总--ln

1.功能&#xff1a;将一个文件或者文件夹链接到另外一个文件或者文件夹上。链接分为硬链接和软链接&#xff0c;硬链接可以看做是一个文件具有多个访问的入口&#xff0c;软链接可以看成是快捷方式。2.用法&#xff1a;ln [选项] 源文件或目录 目标文件或目录3.参数&#xff1a…

用同一uuid作为两个字段的值_这两个小技巧,让SQL语句不仅躲了坑,还提升了 1000 倍...

作者&#xff1a;帅地个人简介&#xff1a;一个热爱编程的在校生&#xff0c;我的世界不只有coding&#xff0c;还有writing。目前维护订阅号「苦逼的码农」&#xff0c;专注于写「算法与数据结构」&#xff0c;「Java」,「计算机网络」。本次来讲解与 SQL 查询有关的两个小知识…

vue动态绑定类样式ClassName知多少

对于动态绑定类样式&#xff0c;之前用的最多的也就是&#xff1a;class"{classA:true}" &#xff0c;今天遇到一种情况&#xff0c;就是要给元素动态添加一个保存在数据源中的类样式&#xff0c;那前边的这种写法显然满足不了。 想起之前微信小程序中动态添加类样式…

C#深入浅出 关键字(一)

1.thisthis关键字用于指示当前对象“自己”&#xff0c;来看一个例子&#xff0c;了解什么时候需要用thisclass Star{String name;int age;public void SetInfo(string name,int age){name name;//注意此处的赋值age age;//}public void Show(){Console.WriteLine(name"…

利用platform库获取浏览器和操作系统版本

原生方法检测 网站获取用户的浏览器和操作系统版本是一个很常见的需求&#xff0c;但是细说起来这个功能的实现并不简单。一般情况下有两种思路。 一是利用用户代理UserAgent来判断浏览器和OS的版本&#xff0c;因为各个平台和浏览器的UA都不一样。但是这种方法存在一个局限性&…

linux桌面lxde 安装_观点|最新精简型 Linux 桌面环境大比拼:LXDE Vs. Xfce Vs. MATE

对于相当一部分 Linux 用户而言&#xff0c;性能永远是其追求的终极目标。无论他们使用的计算机已经太过陈旧&#xff0c;需要尽量发掘其中的有限潜能&#xff0c;还是希望凭借手中崭新的高性能系统承载全部高强度任务负载&#xff0c;让一切保持简洁。这些都是实现性能保障的重…

Android SQLite详解

在项目开发中&#xff0c;我们或多或少都会用到数据库。在Android中&#xff0c;我们一般使用SQLite&#xff0c;因为Android在android.database.sqlite包封装了很多SQLite操作的API。我自己写了一个Demo来总结SQLite的使用&#xff0c;托管在Github上&#xff0c;大家可以点击…

Catalan数的理解

Catalan数的理解 f(0)1f(1)1f(2)2f(3)5f(4)14f(5)42f(2)f(1)f(1)f(3)f(2)f(1)*f(1)*f(2)f(4)f(3)f(2)*f(1)f(1)*f(2)f(3)通项公式&#xff1a;f(n) f(n-1) f(n-2)f(1) f(n-3)f(2) ... f(1)f(n-2) f(n-1) 理解&#xff1a;固定一个&#xff0c;n-1个全在左边&#xff0c;n-…

Type interface mapper.UserMapper is not known to the MapperRegistry

Type interface mapper.UserMapper is not known to the MapperRegistry. 报错&#xff1a;Type interface mapper.UserMapper is not known to the MapperRegistry. 解决&#xff1a;已经解决&#xff1b;请查看mapper是否配置正确&#xff0c;我下面就配置错误了。 解决效果…

我看objective-C --不要把objC当做c/c++的超集

--不要把objC当做c/c的超集 我承认看objective-C的时间不是很长&#xff0c;连apple官网的objCpdf都没看完。 但是我已经感觉到很多介绍objC文章都说过的一句话是在误导初学者。那句话 就是objective-C是 c/c语言的超集。 我们在学与c/c相关的语言的时候很自然的想到java、c#这…

微信整人假红包图片_警惕:千万别点!这些红包是假的

春节将至&#xff0c;又到了“考验手速”的时候。近年春节&#xff0c;“抢红包”为大家带来了“新年味”与许多快乐。但是&#xff0c;有些不法分子却从中捣乱&#xff0c;制造了一些假红包企图骗取钱财。如何辨别“假红包”&#xff1f;这里总结了几种“假红包”类型&#xf…

SQL Server中SCAN 和SEEK的区别

SQL Server中SCAN 和SEEK的区别 SQL SERVER使用扫描&#xff08;scan&#xff09;和查找&#xff08;seek&#xff09;这两种算法从数据表和索引中读取数据。这两种算法构成了查询的基础&#xff0c;几乎无处不在。Scan会扫描并且返回整个表或整个索引。 而seek则更有效率&…

HDU 2897 (博弈 找规律) 邂逅明下

根据博弈论的两条规则&#xff1a; 一个状态是必胜状态当且仅当有一个后继是必败状态一个状态是必败状态当且仅当所有后继都是必胜状态然后很容易发现从1开始&#xff0c;前p个状态是必败状态&#xff0c;后面q个状态是必胜状态&#xff0c;然后循环往复。 1 #include <cstd…