1 条题解
-
0
自动搬运
来自洛谷,原作者为

樱式分解
**搬运于
2025-08-24 21:25:33,当前版本为作者最后更新于2019-08-03 12:42:38,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
我也不知道这叫什么解法,只知道棋子可以放或不放。
因为棋盘较小,可以直接查找多少五子。
于是代码如下
#include <iostream> #include <cstring> using namespace std; bool f[15];//可连成数 int n; bool a[6][6]={false};//所有位置都不放 int ans=0; void c(){ int q=0; for(int i=1;i<=5;i++){ if(a[i][1]&&a[i][2]&&a[i][3]&&a[i][4]&&a[i][5])q++; if(a[1][i]&&a[2][i]&&a[3][i]&&a[4][i]&&a[5][i]q++; }//横竖五子 if(a[1][1]&&a[2][2]&&a[3][3]&&a[4][4]&&a[5][5])q++; if(a[1][5]&&a[2][4]&&a[3][3]&&a[4][2]&&a[5][1])q++; //两条斜边五子 f[q]=true;可连成数标上对; } void dfs(int i,int j,int sum){ if(i==6||sum==n+1){//如果棋子放完或无法继续就停止 if(sum==n+1) c();//如果棋子放满就开始计可连成数。 return; } if(j==6)dfs(i+1,1,sum); else{ a[i][j]=true;//放 dfs(i,j+1,sum+1); a[i][j]=false;//不放 dfs(i,j+1,sum); a[i][j]=false;//回溯 } } int main(){ cin>>n; dfs(1,1,1); for(int i=1;i<=15;i++){ if(f[i])ans+=i;//加上可连成数 } cout<<ans<<endl;输出 return 0;//拜拜 }用心写题解,希望给大家带来点帮助呀!
- 1
信息
- ID
- 472
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者