• 【NOIP2012模拟10.26】雕塑


    这题一眼正解~~~
    打的状压DP,考场↙

    戳着

    哈哈哈。。。(┭┮﹏┭┮)
    改改成滚动,结果WA90。。。
    听某些大佬说是数据出错了~(开❤)
    所以此代码应当是AC了的!

    此处WA90

    呵呵,不过不管了,讲讲状压吧。
    设f[i][j]表示到第i行,在i-1行中占了的列数的状压进制。

    WA90代码:

    #include<cstdio>
    #include<cstring>
    #define ll long long
    using namespace std;
    ll f[2][1048580];
    int n,m,a[21],cp,x=1,las=0;
    
    inline int read()
    {
    	int x=0; char c=getchar();
    	while (c<'0' || c>'9') c=getchar();
    	while (c>='0' && c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
    	return x;
    }
    
    int main()
    {
    	freopen("puts.in","r",stdin);
    //	freopen("put.out","w",stdout);
    	n=read(),m=read();
    	for (int i=1,x,y;i<=m;i++)
    		x=read(),y=read()-1,a[x]+=(1<<y);
    	f[0][0]=1;
    	for (int i=1;i<=n;i++,las=x,x^=1)
    	{
    		memset(f[x],0,sizeof(f[x]));
    		for (int k=0;k<=(1<<n)-1;k++)
    			if (f[las][k])
    				for (int j=1;j<=n;j++)
    				{
    					cp=1<<j-1;
    					if (!(cp & a[i]) && !(cp & k))
    						f[x][k|cp]+=f[las][k];
    				}
    	}
    	printf("%lld
    ",f[las][(1<<n)-1]);
    	return 0;
    }
    
    转载需注明出处。
  • 相关阅读:
    eclipse 提交代码至自己的github上
    今天是国庆
    我要完蛋了!!!
    C/C++知识点
    [c++]const增强
    [c++]指针作为函数参数传递的问题
    day3_JavaScript
    day2_HTML&CSS
    2017年度总结
    小游戏
  • 原文地址:https://www.cnblogs.com/jz929/p/11817761.html
Copyright © 2020-2023  润新知