Spoj ASSIGN - Assignments dp+bitmasking

洛谷——SP1-TEST - Life, the Universe, and Everything +注册SPOJ的方法 C++ 阅读详情

题目链接:https://www.spoj.com/problems/ASSIGN/
参考链接:
1.https://github.com/fazlulkabir94/spoj-problem-solution/blob/master/ASSIGN - Assignments.cpp
2.https://www.quora.com/What-is-__builtin_popcount-in-c++

Problem

Your task will be to calculate number of different assignments of n different topics to n students such that everybody gets exactly one topic he likes.

Input

First line of input contains number of test cases c (1<=c<=80). Each test case begins with number of students n (1<=n<=20). Each of the next n lines contains n integers describing preferences of one student. 1 at the ith position means that this student likes ith topic, 0 means that he definitely doesn’t want to take it.

Output

For each test case output number of different assignments (it will fit in a signed 64-bit integer).

Example

Input:

3
3
1 1 1
1 1 1
1 1 1
11
1 0 0 1 0 0 0 0 0 1 1
1 1 1 1 1 0 1 0 1 0 0
1 0 0 1 0 0 1 1 0 1 0
1 0 1 1 1 0 1 1 0 1 1
0 1 1 1 0 1 0 0 1 1 1
1 1 1 0 0 1 0 0 0 0 0
0 0 0 0 1 0 1 0 0 0 1
1 0 1 1 0 0 0 0 0 0 1
0 0 1 0 1 1 0 0 0 1 1
1 1 1 0 0 0 1 0 1 0 1
1 0 0 0 1 1 1 1 0 0 0
11
0 1 1 1 0 1 0 0 0 1 0
0 0 1 1 1 1 1 1 1 1 1
1 1 0 1 0 0 0 0 0 1 0
0 1 0 1 0 1 0 1 0 1 1
1 0 0 1 0 0 0 0 1 0 1
0 0 1 0 1 1 0 0 0 0 1
1 0 1 0 1 1 1 0 1 1 0
1 0 1 1 0 1 1 0 0 1 0
0 0 1 1 0 1 1 1 1 1 1
0 1 0 0 0 0 0 0 0 1 1
0 1 1 0 0 0 0 0 1 0 1

Output:

6
7588
7426

解释一下这个奇奇怪怪的函数:__builtin_popcount()
       用于计算一个 32 位无符号整数有多少个位为1,它并不是c++中的某个头文件中的函数,而是gcc编译器内置的函数,目的在于使用CPU指令加速计算。

AC代码:

# include <iostream>
# include <cstdio>
# include <cstring>
# include <algorithm>
# define ll long long
using namespace std;

int N;
ll dp[(1<<20)+1];
int topic[20][20];

int main()
{
	int test;
	scanf("%d",&test);
	while(test--)
	{
		scanf("%d",&(N));
		for(int i = 0;i < N; i++){
			for(int j = 0;j < N; j++){
				scanf("%d",&topic[i][j]);
			}
		}
		
		fill(dp,dp+(1<<N)+1,0);
		
		int maxi = (1<<N);
		for(int mask = 0;mask < maxi; mask++)
		{
			int n = __builtin_popcount(mask);
			for(int i = 0;i < N; i++)
				if(topic[n][i] == 1 && (mask & (1<<i)) == 0){
					if(n == 0)
						dp[mask | (1 << i)] = 1;
					else
						dp[mask | (1 << i)] += dp[mask];
				}
		}
		printf("%lld\n",dp[maxi-1]);
	}
	return 0;
}
SPOJ:我对 SPOJ 问题的解决方案 (www.spoj.com) SPOJ( )上选定问题的解决方案 立即下载

相关推荐

SPOJ_tasks

SPOJ_任务 SPOJ的任务

SPOJ简介

SPOJ是波兰最为出色的Online Judge之一,界面和谐,题目类型也非常丰富,适合有一定基础的选手练习,对高手而言也是个提高能力的良好平台。  SPOJ题目分类:classical,challenge,partial,tutorial。  1)classical:ACM题型,通过所有数据才能算AC  2)challenge:有趣的题目,每个题目有不同的评分标准(代码长短,效果好坏,速度等),...

weixin_34183910的博客 1005

SPOJ:Python中SPOJ问题的解决方案

联系 Python中SPOJ问题的解决方案。

如何注册 SPOJ

wrong or unfilled captcha解决方法。这篇文章将会带你解决 SPOJ 注册时,报错 `wrong or unfilled captcha` 的问题,同时它也是一个 SPOJ 注册的小教程。如果你觉得它为你带来了帮助,请将它分享给他人。

zhengqingyu0311 的小屋 6829

一个很很很简单的验证码

呵呵,刚毕业没多久,也不会怎么写验证码,问问别人思路,用好久才写出来个验证码,还很是简单的一个,各位大大别笑话啊....

SPOJ.rar_SPOJ

Online Judge Problem solution VN.SPOJ

SPOJ的账号注册方法

添加成功后打开插件>点击蓝色的新增按钮。在浏览器找到>更多工具>扩展程序。接着你就可以顺利注册SPOJ账号。然后解压文件并用文件夹打包好。打开开发者模式,添加这个插件。接着在匹配模式添加以下网址。在目标网址添加以下网址。

[小吉祥物]白麟 3857

cp:一些SPOJ问题的解决方案

cp:一些SPOJ问题的解决方案

如何注册 SPOJ?

这篇文章将会带你解决 SPOJ 注册时,报错的问题,同时它也是一个 SPOJ 注册的小教程。如果你觉得它为你带来了帮助,请将它分享给他人。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ALcVKVaO-1692670942313)(https://badges.toozhao.com/badges/01G244N9NWG7YBAV5ZQD5D2KR2/blue.svg)] (哇 怎么都这么多了)

chicken_fbl 的博客 3606

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Windows server 2012R2安装Oracle11g

打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Database Configuration Assistant。打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Net Configuration Assistant。首先打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。选择仅安装数据库软件。

qq_74770105的博客 3596

OI/ACM 刷题网站 人气OJ简介

SPOJ简介   SPOJ是波兰最为出色的Online Judge之一,界面和谐,题目类型也非常丰富,适合有一定基础的选手练习,对高手而言也是个提高能力的良好平台。   SPOJ题目分类:classical,challenge,partial,tutorial。   1)classical:ACM题型,通过所有数据才能算AC   2)challenge:有趣的题目,每个题

在思索中前行! 5078

Frida Stalker实战:如何用指令级追踪破解OLLVM混淆的AES算法

本文深入探讨了如何使用Frida Stalker进行指令级追踪,破解经过OLLVM混淆的AES算法。通过动态分析技术,逆向工程师可以精准识别控制流平坦化等混淆手段,还原算法逻辑,特别适用于移动安全领域的加密算法分析。文章提供了详细的配置指南、核心机制解析和实战案例,帮助读者掌握对抗高级代码混淆的有效方法。

weixin_29325955的博客 475

位屏蔽(Bitmasking)中屏蔽字赋值语句 mask | (1 << j) 的解释

位屏蔽(Bitmasking)中屏蔽位赋值语句 mask | (1 << j) 的解释 什么是位屏蔽 位屏蔽是一种以较小代价标识大量数据的方法,比如一个有N个元素的集合,我们可以用一个N位(bit)的值来表示这个集合的子集合。这个值通常被称为mask(屏蔽字)。 例如 10000101 表示集合[1,2,3 … 8]的子集合1,3,8 。屏蔽字在保存的时候实际上是一个二进制形式的Integer。 mask | (1 << j) 在算法中,构造子集合时会用到set(i, mask)方法

ljinest 1853

dify1.3.1应用服务与数据服务分离,附件及插件包迁移至minio,实现离线部署,保证插件正常运行

dify1.3.1应用服务与数据服务分离,附件及插件包迁移至minio,实现离线部署,保证插件正常运行

Time_1023的博客 1872

Pytest 常见问题及其解决方案

Pytest 是一个强大且灵活的测试框架,但初学者在使用过程中难免会遇到各种问题。希望通过这篇文章,你能更好地应对常见的挑战,写出更高效、更稳定的测试代码。测试不是负担,而是保障。写好测试不仅能提高代码质量,还能让你在面对变更时更加从容自信。

qq_52137592的博客 900

常用OJ

首先没有排名比较,只是一个常用OJ记录,仅代表个人的观点,如果有好的推荐可以告诉我。 LeetCode 力扣。英文版,www.leetcode.com。中文版,www.leetcode-cn.com。想要提高自己的收入,来这里刷题不会错。 相对比较专业的OJ,很多程序猿,公司面试都会使用leetcode。 CodeForces 简称CF。一家俄罗斯的网站,英文的。这里有很好的比赛,很好的...

努力中的老周的专栏 9741

uniapp 如何封装实现任意页面都能使用的全局弹窗

项目内容场景全局监听消息提示难点uniapp 无法全局挂载组件解决方案动态创建 DOM + 动态 Vue 实例优势跨页面 / 不依赖页面组件树 / 灵活调用如果你使用的是小程序平台,DOM 操作可能受限,需要用或方式兼容处理。想支持多个弹窗堆叠?你可以扩展,加个弹窗队列管理器。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 944

用Brainfuck挑战SPOJ第一题:从‘超时’到‘怀疑人生’的调试血泪史

本文分享了使用Brainfuck语言在SPOJ平台上解决第一题‘TEST’的调试经历,揭示了性能优化的关键技巧。通过对比不同实现方案的性能差异,探讨了循环展开、内存访问优化等策略,最终成功解决‘超时’问题。文章还分析了不同Brainfuck解释器的性能影响,为编程挑战提供了实用经验。

weixin_30338497的博客 463

【物联网】基于LORA组网的远程环境监测系统设计(ThingsCloud云平台版)_资料编号34

实现一主多从的LORA组网远程通信,主机和两个从机都配备了STM32F103单片机与 LoRa 模块,主机作为中心设备及WIFI网关,负责接收和发送数据到远程物联网平台和手机APP,两个从机则负责采集数据并通过各自的 LoRa组网将数据发送给主机。

嵌入式阿齐Archie 1万+

Odoo17商城微信支付模块,快速一个实现可在线支付的商城

通过集成微信支付APIv3,Odoo 系统实现了高效、安全的支付流程。Native扫码支付和Jsapi微信浏览器内直接拉起支付为用户提供了更加便捷的支付方式。同时,通过发送下单及支付消息给管理员,商家可以实时了解订单状态并进行相应处理。通过集成微信支付 结合 Odoo 系统内置的商城模块,可以为商家快速实现功能完善、高效的电商解决方案。

AaronZZH 的博客 2268

【亲测免费】 探索编程奥秘:SPOJ问题解决方案库

探索编程奥秘:SPOJ问题解决方案库 1、项目介绍 SPOJ是一个充满挑战的在线编程竞赛平台,它提供了大量的算法题目供全球程序员竞技。这个开源仓库正是针对SPOJ中众多问题的解题方案集合,旨在帮助那些在尝试解决问题过程中陷入困境的开发者。当你面对一道难题久攻不下时,这里可以是你寻求启示的最后一站。 2、项目技术分析 项目中的代码涵盖了各种编程技巧和算法,从基础的数据结构到复杂的动态规划和图论问题。...

gitblog_00061的博客 694

CMM软件:PC-DMIS汽车制造二次开发

PC-DMIS 是一种广泛应用于坐标测量机(CMM)的测量软件,它不仅提供了强大的测量功能,还支持用户通过二次开发来扩展其功能。二次开发可以显著提升测量效率,满足特定的测量需求,减少重复性工作,提高数据处理和分析的准确性。本节将介绍 PC-DMIS 二次开发的基本概念、开发环境的搭建以及开发中常用的工具和方法。PC-DMIS 二次开发为用户提供了强大的工具,可以显著提升测量效率、减少重复性工作并提高数据处理和分析的准确性。

kkchenjj的博客 1813

Spoj数论专场解题报告

Spoj数论专题http://acm.hust.edu.cn:8080/judge/contest/view.action?cid=8035#overview  Problem A SPOJ ARCTAN Use of Function Arctan Problem B SPOJ CUTSQRS Cutting off

beat anyone if necessary 6495

逆变器协议派能逆变器协议 485协议

逆变器协议派能逆变器协议 485协议

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

状态压缩bitmasking(state compression)

经常使用在当需要遍历一个数组的所有子集的时候(

qq_44213994的博客 1873

软硬件及信息安全运维技术支持合同.pdf

软硬件及信息安全运维技术支持合同.pdf软硬件及信息安全运维技术支持合同.pdf软硬件及信息安全运维技术支持合同.pdf软硬件及信息安全运维技术支持合同.pdf软硬件及信息安全运维技术支持合同.pdf软硬件及信息安全运维技术支持合同.pdf软硬件及信息安全运维技术支持合同.pdf软硬件及信息安全运维技术支持合同.pdf

上一篇: Spoj PHONELST - Phone List Trie树
下一篇: Spoj FIBOSUM - Fibonacci Sum 矩阵快速幂
philpanic9
博客等级 码龄9年 44粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值