HDU 4739 Zhuge Liang's Mines 预处理排序点(2013 ACM/ICPC Asia Regional Chengdu Online 1003)
彩笔请多指教!
转载请注明出处__谢谢! http://www.cnblogs.com/HaibaraAi/articles/3340109.html by---HaibaraAi 求认识大神(ˇ^ˇ),目前只会水题- -#~~~!
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 #define maxn 101 6 struct point{ 7 int x,y; 8 bool operator<(const point& cmp)const{ 9 if(y!=cmp.y)return y<cmp.y; 10 else return x<cmp.x; 11 } 12 }pt[21]; 13 int vis[maxn][maxn]; 14 int n,ans; 15 void dfs(int t,int val){ 16 if(ans<val)ans=val; 17 if(t>n||val+n-t+1<=ans)return; 18 int x=pt[t].x,y=pt[t].y; 19 if(vis[x][y]<=0){dfs(t+1,val);return;} 20 for(int i=t+1;i<n;i++){ 21 int len=pt[i].x-x; 22 if(len==0)continue; 23 if(pt[i].y>y)break; 24 if(vis[x][y]<=0||vis[x+len][y]<=0||vis[x][y+len]<=0||vis[x+len][y+len]<=0)continue; 25 vis[x][y]--;vis[x+len][y]--;vis[x][y+len]--;vis[x+len][y+len]--; 26 dfs(t+1,val+4); 27 vis[x][y]++;vis[x+len][y]++;vis[x][y+len]++;vis[x+len][y+len]++; 28 } 29 dfs(t+1,val); 30 } 31 int main(){ 32 while(~scanf("%d",&n)&&n!=-1){ 33 memset(vis,0,sizeof vis); 34 for(int i=0;i<n;i++){ 35 scanf("%d%d",&pt[i].x,&pt[i].y); 36 vis[pt[i].x][pt[i].y]++; 37 } 38 sort(pt,pt+n); 39 ans=0; 40 dfs(0,0); 41 printf("%d\n",ans); 42 } 43 return 0; 44 }
浙公网安备 33010602011771号