제출 #1158700

#제출 시각아이디문제언어결과실행 시간메모리
1158700brover29Dango Maker (JOI18_dango_maker)C++17
13 / 100
2097 ms71216 KiB
#include <bits/stdc++.h> //qwerty47924692 using namespace std; using ll = long long; const ll N=3005; const ll M=N*N/3; const string br="617283"; #define sz(a)(ll)a.size() #define f first #define s second ll dp[N][N]; char c[N][N]; ll n,m; struct dango{ vector<pair<ll,ll>>v; }; bool equ(dango a,dango b){ for(auto i:a.v){ for(auto j:b.v){ if(i==j)return 1; } } return 0; } vector<ll>g[M]; vector<ll>l; ll was[M],pr[M]; void dfs(ll v,ll k){ was[v]=1; k^=1; if(k==1)l.push_back(v); for(ll to:g[v]){ if(was[to])continue; dfs(to,k); } }ll try_kuhn(ll v){ if(was[v])return 0; was[v]=1; for(ll to:g[v]){ if(!pr[to]||try_kuhn(pr[to])){ pr[to]=v; return 1; } }return 0; } vector<dango>a; ll kuhn(){ ll ans=0; for(ll i:l){ for(ll j=1;j<=a.size();j++)was[j]=0; ans+=try_kuhn(i); } return ans; }ll ans=0,used[N][N]; void f(ll i,ll j,ll cnt=0){ if(i==n&&j==m){ ans=max(ans,cnt); return; }ll ni=i,nj=j; ni++; if(ni>n){ ni=1; nj++; } f(ni,nj,cnt); if(c[i][j]=='R'&&c[i+1][j]=='G'&&c[i+2][j]=='W'&&!used[i][j]&&!used[i+1][j]&&!used[i+2][j]){ used[i][j]=1; used[i+1][j]=1; used[i+2][j]=1; f(ni,nj,cnt+1); used[i][j]=0; used[i+1][j]=0; used[i+2][j]=0; } if(c[i][j]=='R'&&c[i][j+1]=='G'&&c[i][j+2]=='W'&&!used[i][j]&&!used[i][j+1]&&!used[i][j+2]){ used[i][j]=1; used[i][j+1]=1; used[i][j+2]=1; f(ni,nj,cnt+1); used[i][j]=0; used[i][j+1]=0; used[i][j+2]=0; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin>>n>>m; for(ll i=1;i<=n;i++){ for(ll j=1;j<=m;j++){ cin>>c[i][j]; } } f(n,0); cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...