SGU 224
2015-08-26 19:39
260 查看
题目大意:给定一个n*n的国际象棋棋盘和k个后,问使得所有后互不相攻击方案数。
题解:无脑爆搜(和紫书P193上面那个差不多),我265ms过的,0.75秒就会T,还好,捏一把冷汗。
%%%__debug大神今天一下午过了BZOJ1999树网的核加强版,还口口声声地吐槽联赛数据弱,WA3个地方的程序都能A。
题解:无脑爆搜(和紫书P193上面那个差不多),我265ms过的,0.75秒就会T,还好,捏一把冷汗。
%%%__debug大神今天一下午过了BZOJ1999树网的核加强版,还口口声声地吐槽联赛数据弱,WA3个地方的程序都能A。
#include<cstdio> #include<cstdlib> #include<algorithm> #include<iostream> #include<cstring> const int MAXN=11,MAXK=101; int n,k,vis[MAXN]; long long times,ans=0; void dfs(int cur,int res) { if(cur==n||res==0){ans++;return ;} if(res<n-cur)dfs(cur+1,res); for(int i=0;i<n;i++) { int ok=1; vis[cur]=i; for(int j=0;j<cur;j++) if((vis[cur]>=0&&vis[j]>=0)&&(vis[cur]==vis[j]||cur-vis[cur]==j-vis[j]||cur+vis[cur]==j+vis[j])) {ok=0;break;} if(ok)dfs(cur+1,res-1); vis[cur]=-1; } } int main() { freopen("224.in","r",stdin); freopen("w.out","w",stdout); scanf("%d %d",&n,&k); memset(vis,-1,sizeof(vis)); if(k>n){printf("0\n");return 0;} if(k==0){printf("1\n");return 0;} dfs(0,k); std::cout<<ans<<std::endl; }
相关文章推荐
- JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
- Proud Merchants
- Linux mysql安装问题
- LightOJ 1149 - Factors and Multiples【二分图最大匹配】
- Cocos2dx学习笔记3:基础概念介绍
- 人工智能进入股市操盘获利巨大激荡股市
- 当互联网遇上家装,十大家装O2O混战
- c++ 可重载运算符和不可重载运算符
- MySQL Query 的优化—合理设计并利用索引
- android studio 导入源码
- Kth Largest Element in an Array
- css3的选择器
- See You Again
- 线性筛
- [leetcode-205]Isomorphic Strings(java)
- MongoDB学习八--MongoDB的索引操作
- Android常用控件之AutoCompleteTextView、Spinner
- angularjs自动加载和手动加载
- A Simple Problem with Integers(树状数组HDU4267)
- UVa 1153:Keep the Customer Satisifed(贪心)