离谱,为什么吸氧AC,不吸氧RE
查看原帖
离谱,为什么吸氧AC,不吸氧RE
300531
EBeason楼主2022/9/2 15:46
#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector> 
#include<map>
#include<list>
#include<cmath>
#include<set>
#include<map>
using namespace std;
#define ll long long
#define lowbit(x) x&-x
#define zuo p<<1
#define you p<<1|1
const int MaxN=1e5+100;
const int MaxM=1e7+100;
ll N,M,num[21],sum[MaxN][21],F[MaxM];
template<class T>
inline void qread(T &sum)
{
	sum=0;int boo=1;
	char x=getchar();
	while(x<'0'||x>'9'){if(x=='-')boo=-1;x=getchar();}
	while(x>='0'&&x<='9'){sum=(sum<<1)+(sum<<3)+x-'0';x=getchar();}
	sum*=boo;
}
template<class T>
void qput(T x)
{
	if(x<0) {x=-x;putchar('-');}
	if(x>9){qput(x/10);}
	putchar(x%10+48);
}
int main()
{
//	freopen("a.txt","r",stdin);
//	freopen("a.txt","w",stdout);
	qread(N);qread(M);
	for(int i=1;i<=N;i++)
	{
		int x;
		qread(x);
		num[x]++;
		for(int j=1;j<=M;j++) sum[i][j]=sum[i-1][j];
		sum[i][x]++;
	}
	memset(F,127/3,sizeof F);
	F[0]=0;
	for(int i=1;i<(1<<M);i++)
	{
		ll len=0;
		for(int j=1;j<=M;j++)
		{
			if(i&(1<<(j-1))) len+=num[j];
		}
		for(int j=1;j<=M;j++)
		{
			F[i]=min(F[i],F[i^(1<<(j-1))]+num[j]-sum[len][j]+sum[len-num[j]][j]);
		}
	}
	qput(F[(1<<M)-1]);
} 

离谱,为什么吸氧AC,不吸氧RE
不吸氧
吸氧
求大佬解答

2022/9/2 15:46
加载中...