首页 > 其他分享 >Largest Remainder 数位DP的一个题目,和排列有关

Largest Remainder 数位DP的一个题目,和排列有关

时间:2022-08-29 21:49:12浏览次数:79  
标签:GCC 排列 long ..... Largest include Remainder DP

Problem - D - Codeforces

题意大概是说给你D个数(1<=ai<=9)求全排列组成的D位数模k(1<=K<=200)最大的那个最大的序列.

一开始想的是把全排列分成两段,bitset维护选的数,最后合并一下找最大的...无奈算错了时间复杂度,其实是16!/8!这个思路的优化意义不大.....

------------------------

看了AC的代码,这个题的状态确实是没有get到的.设一个f[i][j],表示的是余数为i时,对数的使用情况为j(二进制下表示哪些数被使用的状态)时的最大排列

转移的话,是选择某一个数后,对应j状态,%k的余数的排列更新成更大的.

和上一次做到的求符合条件的排列的种数有些类似.

这个用二进制枚举所有状态上一次我还是在费解的开关里看到的..

代码

#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include<iostream>
#include<cstring>
#include<cctype>
#include<cstdio>
using namespace std;
int d,k,a[20];
long long f[205][1<<16];
inline void qin(int &x)
{
	char c=0;x=0;
	while(!isdigit(c))c=getchar();
	while(isdigit(c))x=x*10+c-'0',c=getchar();
}
signed main()
{
	qin(d),qin(k);
	for(int i=0;i<d;i++)
		qin(a[i]);
	memset(f,-1,sizeof(f));
	f[0][0]=0;
	for(int i=0;i< 1<<d;i++)
	{
		for(int j=0;j<k;j++)
		{
			if(f[j][i]==-1)
				continue;
			for(int l=0;l<d;l++)
			{
				if(i>>l&1)continue;
				long long sta=i|(1<<l),stb=(j*10+a[l])%k;
				f[stb][sta]=(f[stb][sta]>f[j][i]*10+a[l]?f[stb][sta]:f[j][i]*10+a[l]);
			}
		}
	}
	for(int i=k-1;i>=0;i--)
	{
		if(f[i][(1<<d)-1]!=-1)
		{
			printf("%lld",f[i][(1<<d)-1]);
			break;
		}
	}
	return 0;
}

补题的时候才离谱

记得开O2,用三目运算手写max,记得用手写的快读.....

 

标签:GCC,排列,long,.....,Largest,include,Remainder,DP
From: https://www.cnblogs.com/qbning/p/16637449.html

相关文章

  • JS/TS算法---dp和贪心
    一、动态规划动态规划(dynamicprogramming,DP)是一种将复杂问题分解成更小的子问题来解决的优化技术。注意,动态规划和分而治之是不同的方法。分而治之方法是把问题分解......
  • Educational DP Contest G - Longest Path
    目录题目思路代码题目给定一个有向无环图,叫你求图中的最长路径思路记忆化搜索,定义f[i]:表示从点i开始的最长路径长度,那么很容易得出转移方程为\(f_i=max(f_i,f_......
  • 数位DP详解
    数位dp一般针对统计某个区间符合一个或多个条件的数的数量,因为算法名字叫数位dp,所以我们需要对数位进行枚举思路考虑,传统做法,例如统计[L,R]之间有多少个数,该数至少含......
  • 【ubuntu】解决Could not get lock /var/lib/dpkg/lock-frontend
    1、问题在执行一键安装k8s,ssh到其他节点更新apt源,我手动执行update的时候,报的这个错  2、处理方法psaux|grepapt找出对应的进程id,然后killsudokill3374......
  • maybe_serialize() | WordPress序列化数据/数组/对象
    函数maybe_serialize(string|array|object$data)描述该WordPress函数可将数组/对象/字符串序列化。参数$data,(string|array|object)需要序列化的数据。返回值(m......
  • QT UDP通信聊天程序(单播、广播、组播)
    QTUDP通信(单播、广播、组播)  日期:2021-03-26    浏览:126    评论:0    核心提示:1.QUdpSocketUDP是轻量的、不可靠的、面向数据报、无连接的协议,它可以用......
  • Arrange the Bulls(状压dp)
    ArrangetheBulls(状压dp)题目大意:一些牛喜欢一些地方(每头牛都有一些喜欢的地方),现在要把这些地方分配给牛,每头牛都应该分到一个地方,问有多少种分配的方法此题拥有着状压d......
  • HIT 校测 Round1 F - dp - 二项式定理 -
    题意:求\(x\in[0,10^n)\)的个数,使得\(4|x\)且\(x\)中数码4的个数为4的倍数,\(n\leq10^{16}\)题解:第一个条件可以转化为末两位为4的倍数。易知其中不含数码4的有18个,含1个......
  • pytorch多卡训练DDP卡死问题排查
    背景单机多卡并行模型训练,使用DistributedDataParallel加速,调用超过一个GPU会发生卡死,表现为GPU0占用100%且无法继续。排查使用nvtop工具查看,发现GPU0会被分配nproc_per......
  • Windows RDP的RCE漏洞分析和复现(CVE-2019-0708)
    0x00漏洞描述Windows系列服务器于2019年5月15号,被爆出高危漏洞,该漏洞影响范围较广如:windows2003、windows2008、windows2008R2、windowsxp系统都会遭到攻击,该服务器漏......