hdu2510-符号三角形(dfs+打表)
2024-09-03 23:43:18
n只有24 可以写个暴力搜索,然后打表,不然这个很难通过剪枝直接优化到1s以内。
#include<bits/stdc++.h> #define inf 0x3f3f3f3f const int maxn=; using namespace std; int n,m,ans; int res[maxn+]={,,,,,,,,,,,,,,,,,,,,,,,,}; int a[maxn+][maxn+]; void dfs(int layer,int lnum,int pos,int nei,int n){
//printf("%d %d %d %d\n",layer,lnum,pos,nei);
if(pos+nei>m) return ;
if(pos-nei>(m-pos-nei)) {
//printf("%d %d\n",pos,nei);
return ;
}
if(layer==&&pos==m/&&nei==m/){
ans++;
return ;
}
if(layer==&&(pos!=m/||nei!=m/)) return ;
if(pos>m/||nei>m/) return ;
if(layer==n&&lnum<=layer){
a[layer][lnum]=;
if(lnum==layer)
dfs(layer-,,pos+,nei,n);
else dfs(layer,lnum+,pos+,nei,n);
a[layer][lnum]=-;
if(lnum==layer)
dfs(layer-,,pos,nei+,n);
else dfs(layer,lnum+,pos,nei+,n);
} else if(layer!=n){
if(lnum<=layer){
if(a[layer+][lnum]==a[layer+][lnum+]){
a[layer][lnum]=;
if(lnum==layer)
dfs(layer-,,pos+,nei,n);
else dfs(layer,lnum+,pos+,nei,n);
} else {
a[layer][lnum]=-;
if(lnum==layer)
dfs(layer-,,pos,nei+,n);
else dfs(layer,lnum+,pos,nei+,n); }
} }
} int main()
{
/*for(int i=1;i<=24;i++){
m=(i*(i+1)/2);
if(m&1){
printf("0\n");
} else {
ans=0;
dfs(i,1,0,0,i);
printf("%d\n",ans);
}
}*/
while(scanf("%d",&n)!=EOF&&n){
printf("%d %d\n",n,res[n]);
}
return ;
}
最新文章
- C#基础:飞行棋游戏
- js-统计选项个数
- 一些Discuz!代码
- python数据类型之 set
- POJ 1088 滑雪 (记忆化搜索)
- cocos2d-x 触摸偏移
- keilkill.bat
- php流行笔试题及答案
- 二叉查找树:Python实现
- C#设计模式之二十三解释器模式(Interpreter Pattern)【行为型】
- 【QAQ的Minecraft】
- 无service.bat的tomcat服务怎么设置自启动
- c提高第六次课 文件读取
- http协议常见状态码含义
- shell 脚本加密
- FortiGate上架前准备
- python 全栈开发,Day128(创建二维码,扫码,创建玩具的基本属性)
- day0321正则表达式
- Java URLEncoder URLDecoder
- ajax写用户注册
热门文章
- Mac系统存储-其他存储无故增大
- 重新拾取:ASP.NET Core WebApi 使用Swagger支持授权认证
- Linux下Fork与Exec
- leetcode 130 Surrounded Regions(BFS)
- leetcode 102 Binary Tree Level Order Traversal(DFS||BFS)
- nginx使用ssl模块配置HTTPS支持 <;转>;
- gulp记录
- 01PS基础
- dmidecode 命令
- Spring笔记03(Spring创建对象的三种方式)