CodeForces 142C Help Caretaker
来源:互联网 发布:算法的设计原则 编辑:程序博客网 时间:2024/06/06 00:44
http://codeforces.com/problemset/problem/142/C
算是水果的,因为真正的剪枝应该是除以5,但是总超时,改成除以6,居然过了。。。
#include<iostream>#include<cmath>#include<cstdio>#include<sstream>#include<cstdlib>#include<string>#include<cstring>#include<algorithm>#include<vector>#include<map>#include<set>#include<stack>#include<list>#include<queue>#include<ctime>#include<bitset>#define eps 1e-6#define INF 0x3f3f3f3f#define PI acos(-1.0)#define ll __int64#define LL long long#define lson l,m,(rt<<1)#define rson m+1,r,(rt<<1)|1#define M 1005#pragma comment(linker, "/STACK:1024000000,1024000000")using namespace std;int n,m;int maps[11][11];int a[4][5][2]={ {{0,0},{0,1},{0,2},{1,1},{2,1}}, {{0,0},{1,-2},{1,-1},{1,0},{2,0}}, {{0,0},{1,0},{2,-1},{2,0},{2,1}}, {{0,0},{1,0},{1,1},{1,2},{2,0}} };int ans;int v[200];int ANS[200];int top;bool isok(int x,int y){ return x>=0&&x<n&&y>=0&&y<m;}struct point{ int x,y;};bool istrue(int x,int y,int k,point save[]){ for(int i=0;i<5;i++) { int nx=x+a[k][i][0]; int ny=y+a[k][i][1]; if(!isok(nx,ny)) return false; if(maps[nx][ny]) return false; point t; t.x=nx; t.y=ny; save[i]=t; } for(int i=0;i<5;i++) { maps[save[i].x][save[i].y]=1; } return true;}void dfs(int x,int y,int tot){ if(y==m) { y=0; x++; } if((n*m-x*m+y)/6+tot<=ans&&ans) return; if(x>=n) { if(tot>ans||ans==0) { ans=tot; for(int i=0;i<top;i++) { ANS[i]=v[i]; } } return; } for(int i=0;i<5;i++) { if(i==4) { v[top++]=i; dfs(x,y+1,tot); top--; continue; } point save[5]; if(istrue(x,y,i,save)) { v[top++]=i; dfs(x,y+1,tot+1); for(int j=0;j<5;j++) { maps[save[j].x][save[j].y]=0; } top--; } }}char pri[15][15];int main(){ while(~scanf("%d%d",&n,&m)) { memset(maps,0,sizeof(maps)); ans=top=0; char word='A'; dfs(0,0,0); printf("%d\n",ans); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { pri[i][j]='.'; } } for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(ANS[i*m+j]==4) {continue;} for(int k=0;k<5;k++) { pri[i+a[ANS[i*m+j]][k][0]][j+a[ANS[i*m+j]][k][1]]=word; } word++; } } for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { printf("%c",pri[i][j]); } puts(""); } } return 0;}
- CodeForces 142C Help Caretaker
- CodeForces 142B(Help General)
- 【杂题】 codeforces 142B Help General
- 【Codeforces 98E】Help Shrek and Donkey
- linux c/c++ 帮助 help
- help
- Help
- HELP
- help
- HELP
- help
- help
- help
- help
- help
- Help
- --help
- help
- Struts 服务端表单数据验证流程
- Oracle XML DB
- NSPredicate官方文档翻译
- C++ explicit
- 获得获得手机cpu系列号
- CodeForces 142C Help Caretaker
- Oracle EXPLAIN PLAN用法
- Windows下32位汇编程序环境搭建
- xml学习笔记三-DTD
- hdu-2186-悼念512汶川大地震遇难同胞——一定要记住我爱你
- 关于NSPredicate(1)
- ARM架构kprobe应用及实现分析(8.0 register_kprobe实现)
- imageview 缩放 涂鸦
- MFC常用各种数据类型