「國慶訓練」 Land of Farms(HDU-5556)
阿新 • • 發佈:2018-10-03
int per 題意 ems bool fine with algo def
題意
分析
代碼
#include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <vector> #include <algorithm> #include <map> #define MP make_pair #define PB emplace_back #define fi first #define se second #define ZERO(x) memset((x), 0, sizeof(x)) #define ALL(x) (x).begin(),(x).end() #define rep(i, a, b) for (repType i = (a); i <= (b); ++i) #define per(i, a, b) for (repType i = (a); i >= (b); --i) #define QUICKIO ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); using namespace std; using ll=long long; using repType=int; const int MAXN=105; int mat[12][12]; vector<int> vec; map<int, int> idx; int n,m; bool graph[MAXN][MAXN]; int dp[MAXN]; int mx; int stk[MAXN][MAXN]; void init() { ZERO(mat); memset(graph,true,sizeof(graph)); vec.clear(); idx.clear(); } const int dx[]={1,0,-1,0}, dy[]={0,1,0,-1}; int query(int x) { if(idx.find(x)==idx.end()) { vec.PB(x); return idx[x]=int(vec.size())-1; } else return idx[x]; } void dfs(int N,int num,int step) { if(num==0) { if(step>mx) { mx=step; } return; } for(int i=0;i<num;i++) { int k = stk[step][i]; if(step+N-k<=mx) return ; if(step+dp[k]<=mx) return ; int cnt = 0; for(int j=i+1;j<num;j++) if(graph[k][stk[step][j]]) { stk[step+1][cnt++]=stk[step][j]; } dfs(N,cnt,step+1); } } void run(int N) { mx=0; for(int i=N-1;i>=0;i--) { int sz=0; for(int j=i+1;j<N;j++) if(graph[i][j]) stk[1][sz++]=j; dfs(N,sz,1); dp[i]=mx; } } int main() { QUICKIO int T; cin>>T; rep(kase,1,T) { init(); cin>>n>>m; int blank_area=0; rep(i,1,n) rep(j,1,m) { char chr; cin>>chr; if(chr==‘.‘) mat[i][j]=10+(blank_area++); else { mat[i][j]=chr-‘0‘; /* if(ma.find(mat[i][j])==ma.end()) { vec.PB(mat[i][j]); ma[mat[i][j]]=int(vec.size())-1; } */ } } rep(i,1,n) rep(j,1,m) { int gx=query(mat[i][j]); rep(k,0,3) { int ti=i+dx[k], tj=j+dy[k]; if(ti>=1 && ti<=n && tj>=1 && tj<=m) { int gy=query(mat[ti][tj]); if(gx!=gy) graph[gx][gy]=graph[gy][gx]=false; } } } int gsz=vec.size(); run(gsz); cout<<"Case #"<<kase<<": "<<dp[0]<<endl; } return 0; }
「國慶訓練」 Land of Farms(HDU-5556)