2016MUTC8-1003 color II

    xiaoxiao2026-03-11  6

    题解转自:点击打开链接

    这边有个小技巧:%2^32可以直接将变量设成unsigned int

    #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> using namespace std; typedef unsigned int UI; const int N=20; UI dp[1<<N]; int vis[1<<N],n; char a[N][N]; UI RP(UI a,UI b) { UI ans=1; for (;b;b>>=1){ if (b&1)ans*=a; a*=a; } return ans; } void work() { scanf("%d",&n); for (int i=0;i<n;i++)scanf("%s",a[i]); int maxmask=1<<n; for (int mask=1;mask<maxmask;mask++)vis[mask]=0; for (int mask=1;mask<maxmask;mask++)for (int i=0;i<n;i++)if (1<<i&mask){ for (int j=0;j<n;j++)if ((1<<j&mask) && a[i][j]=='1'){vis[mask]=1;break;} if (vis[mask])break; } UI ans=0; for (int mask=1;mask<maxmask;mask++){ dp[mask]=100; for (int ma=mask;ma;ma=(ma-1)&mask)if (!vis[ma]){ dp[mask]=min(dp[mask],dp[mask^ma]+1); } ans+=dp[mask]*RP(233,mask); } printf("%u\n",ans); } int main() { int Case;scanf("%d",&Case); while (Case--)work(); return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-1307843.html
    最新回复(0)