• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
HaibaraAi
博客园    首页    新随笔    联系   管理    订阅  订阅

HDU 4739 Zhuge Liang's Mines 预处理排序点(2013 ACM/ICPC Asia Regional Chengdu Online 1003)

彩笔请多指教!

转载请注明出处__谢谢! http://www.cnblogs.com/HaibaraAi/articles/3340109.html by---HaibaraAi 求认识大神(ˇ^ˇ),目前只会水题- -#~~~!
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4739
 
 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 }
View Code 2013-09-26 08:48:59 

 

posted @ 2013-09-26 08:51  HaibaraAi  阅读(114)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3