poj 1564

给出一个s,n个数,输出所有的能够得到s的方案

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; int a[];
int ans[];
int n,s,flag; void dfs(int x,int sum,int cnt){
if(sum > s) return;
if(sum == s){
flag = ;
printf("%d",ans[]);
for(int i = ;i < cnt;i++) printf("+%d",ans[i]);
printf("\n");
} for(int i = x;i < n;i++){
ans[cnt] = a[i];
dfs(i+,sum+a[i],cnt+);
while(i+ < n && a[i] == a[i+]) i++;
}
} int main(){
while(scanf("%d %d",&s,&n) != EOF && s){
for(int i = ;i < n;i++) scanf("%d",&a[i]);
printf("Sums of %d:\n",s);
flag = ;
dfs(,,);
if(!flag) printf("NONE\n");
}
return ;
}

poj 2488

骑士周游列国

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; int res[][];
int vis[][]; int dir[][] = {-,-, -,, -,-, -,, ,-, ,, ,-, ,}; int m,n;
int flag; void dfs(int x,int y,int cnt){
if(flag) return;
res[cnt][] = x;res[cnt][] = y;
if(cnt == n*m) {
flag = ;
for(int i = ;i <= n*m;i++)
printf("%c%d",res[i][]-+'A',res[i][]);
printf("\n");
return;
} for(int i = ;i < ;i++){
int xx = x+ dir[i][];
int yy = y+ dir[i][];
if(!vis[xx][yy] && xx> && xx <= n && yy > && yy <= m){
vis[xx][yy] = ;
dfs(xx,yy,cnt+);
vis[xx][yy] = ;
}
}
} int main(){
int T;
scanf("%d",&T);
int kase = ;
while(T--){
scanf("%d %d",&m,&n); memset(vis,,sizeof(vis));
vis[][] = ; printf("Scenario #%d:\n",++kase);
flag = ;
dfs(,,); if(!flag) printf("impossible\n");
if(T) printf("\n"); }
return ;
}

poj 3009

这道题自己没有写出来

后来和题解比较了一下,这几个地方写错了

把障碍物击碎后的状态,先改成0搜一遍,等搜完还要再改回1,是为了搜到以后的所有情况

找到起点后,把起点改成0

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std; const int INF = ;
int g[][];
int vis[][];
int n,m;
int sx,sy,ex,ey;
int flag,ans;
int dir[][] = {,,,,-,,,-}; int in(int x,int y){
if(x >= && x <= m && y >= && y <= n) return ;
return ;
} void dfs(int x,int y,int step){
if(step > ) return; int i,xx,yy;
for( i = ;i < ;i++){
xx = x+dir[i][];
yy = y+dir[i][]; if(step < ans && in(xx,yy) && g[xx][yy] != ){
while(g[xx][yy] == && in(xx,yy)){
xx +=dir[i][];
yy +=dir[i][];
}
int xx2 = xx-dir[i][];
int yy2 = yy-dir[i][];
if(in(xx,yy)){
if(g[xx][yy] == ){
ans = step+;
return;
}
if(g[xx][yy] == ){
g[xx][yy] = ;//碰到障碍物,将障碍物清除
dfs(xx2,yy2,step+);
g[xx][yy] = ;//这一次dfs完后改回来是为了遍历完以后的所有情况
}
}
}
}
} int main(){
while(scanf("%d %d",&n,&m) != EOF && (m+n)){//输入的是n行m列
memset(g,,sizeof(g));
for(int i = ;i <= m;i++){
for(int j = ;j <= n;j++){
scanf("%d",&g[i][j]);
if(g[i][j] == ) {
sx = i,sy = j;
g[i][j] = ;
}
}
} ans = ;
dfs(sx,sy,);
if(ans > ) printf("-1\n");
else printf("%d\n",ans);
}
return ;
}

poj 1321

给出棋盘,旗子摆放不能同行或者同列,问放k个有多少种办法

感觉和poj 1564有一点点像,搜行,看对应的列是否被占用

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; typedef long long LL;
char g[][];
int vis[];
LL ans;
int n,k; void dfs(int x,int cnt){
if(cnt == k){
ans++;
// printf("ans = %d\n",ans);
return;
}
for(int i = x;i <= n;i++){
for(int j = ;j <= n;j++){
if(g[i][j] == '#' && !vis[j]){
vis[j] = ;
dfs(i+,cnt+);
vis[j] = ;
}
}
}
} int main(){
while(scanf("%d %d",&n,&k) != EOF){
if(n == - && k == -) break;
for(int i = ;i <= n;i++)
for(int j = ;j <= n;j++) cin>>g[i][j]; ans = ;
dfs(,);
printf("%I64d\n",ans);
}
return ;
}

uva 11396

给出一个无向图,再给出一个爪形,问这个无向图是否能够分成一个个爪形的单元

判断是否是二分图

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std; const int maxn = ;
vector<int> g[maxn];
int color[maxn];
int n; bool bipartite(int u){
for(int i = ;i < g[u].size();i++){
int v = g[u][i];
if(color[v] == color[u]) return false;
if(!color[v]) {
color[v] = -color[u];
if(!bipartite(v)) return false;
}
}
return true;
} int main(){
int u,v;
while(scanf("%d",&n) != EOF && n){
for(int i = ;i <= n;i++) g[i].clear();
while(scanf("%d %d",&u,&v) != EOF){
if(u == && v == ) break;
g[u].push_back(v);g[v].push_back(u);
}
memset(color,,sizeof(color));
color[] = ;
if(bipartite()) puts("YES");
else puts("NO");
}
return ;
}

dfs___刷题记录的更多相关文章

  1. PE刷题记录

    PE刷题记录 PE60 / 20%dif 这道题比较坑爹. 所有可以相连的素数可以构成一张图,建出这张图,在其中找它的大小为5的团.注意上界的估算,大概在1W以内.1W内有1229个素数,处理出这些素 ...

  2. leetcode刷题记录--js

    leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...

  3. Leetcode刷题记录(python3)

    Leetcode刷题记录(python3) 顺序刷题 1~5 ---1.两数之和 ---2.两数相加 ---3. 无重复字符的最长子串 ---4.寻找两个有序数组的中位数 ---5.最长回文子串 6- ...

  4. 刷题记录:[HarekazeCTF2019]encode_and_encode

    目录 刷题记录:[HarekazeCTF2019]encode_and_encode 一.知识点 JSON转义字符绕过 php伪协议 刷题记录:[HarekazeCTF2019]encode_and_ ...

  5. 刷题记录:[De1CTF 2019]Giftbox && Comment

    目录 刷题记录:[De1CTF 2019]Giftbox && Comment 一.知识点 1.sql注入 && totp 2.RCE 3.源码泄露 4.敏感文件读取 ...

  6. 刷题记录:[强网杯 2019]Upload

    目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challe ...

  7. 刷题记录:[XNUCA2019Qualifier]EasyPHP

    目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...

  8. 刷题记录:[DDCTF 2019]homebrew event loop

    目录 刷题记录:[DDCTF 2019]homebrew event loop 知识点 1.逻辑漏洞 2.flask session解密 总结 刷题记录:[DDCTF 2019]homebrew ev ...

  9. 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System

    目录 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System 知识点 1.padding-oracle attack 2.cbc字节翻转攻击 3.FFMpeg文件读取漏 ...

随机推荐

  1. Windows Server菜鸟宝典之一:Windows Server 2008 R2 AD服务器搭建

        1.对于将要安装成为DC的服务器来讲,其系统配置以及基本的磁盘规划在此就不在累述了,但是关键的网络连接属性是必须要注意的.可以通过打开本地连接的属性来进行配置其IP属性.作为服务器DC的IP地 ...

  2. BZOJ 3940: [Usaco2015 Feb]Censoring AC自动机_栈

    Description Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so ...

  3. 【udacity】机器学习-2模型验证

    Evernote Export 1.模型的评估与验证简介 机器学习通常是大量传入数据,然后会有一些关于数据的决策.想法和摘要. 2.模型评估 评估模型使用的是各种数据分析的方法,至少需要使用pytho ...

  4. Linux crontab 在每月最后一天执行

    59  23 * * * if [ `date +%d -d tomorrow` = 01 ]; then; command(/usr/bin/curl -s -o temp.txt  http:// ...

  5. 解决time命令输出信息的重定向问题

    解决time命令输出信息的重定向问题 time命令的输出信息是打印在标准错误输出上的, 我们通过一个简单的尝试来验证一下. [root@web186 root]# time find . -name ...

  6. java的数据的类型

    1分类: 基本数据类型长度: Java中简单类型,占用字节数, 以及包装类 浮点数的默认类型是Double(8个字节) 如果想直接想一个变量赋值一个float(4个字节)要在数值后面添加f/F 如同向 ...

  7. 最大团&稳定婚姻系列

    [HDU]   1530 Maximum Clique 1435 Stable Match 3585 maximum shortest distance 二分+最大团 1522 Marriage is ...

  8. “王者对战”之 MySQL 8 vs PostgreSQL 10

    既然 MySQL 8 和 PostgreSQL 10 已经发布了,现在是时候回顾一下这两大开源关系型数据库是如何彼此竞争的. 在这些版本之前,人们普遍认为,Postgres 在功能集表现更出色,也因其 ...

  9. 香蕉派 Banana pi BPI-M2 四核开源单板计算机.

     Banana PI BPI-M2 是一款四核高性能单板计算机,Banana PI BPI-M2是一款比树莓派更强悍的四核Android4.4产品. Banana PI BPI-M2兼容性强大,能 ...

  10. Android ViewGroup拦截触摸事件具体解释

    前言 在自己定义ViewGroup中.有时候须要实现触摸事件拦截.比方ListView下拉刷新就是典型的触摸事件拦截的样例. 触摸事件拦截就是在触摸事件被parent view拦截,而不会分发给其ch ...