2022寒假集训day4
day4(day5补完的)
继续刷搜索方面的题,
初步了解了序列。
T1
迷宫问题
题目描述
设有一个 n*n 方格的迷宫,入口和出口分别在左上角和右上角。迷宫格子中分别放 0 和 1 ,0 表示可通,1 表示不能,入口和出口处肯定是 0。迷宫走的规则如下所示:即从某点开始,有八个方向可走,前进方格中数字为 0 时表示可通过,为 1 时表示不可通过,要另找路径。找出所有从入口(左上角)到出口(右上角)的路径(不能重复),输出路径总数,如果无法到达,则输出 0。
输入格式
共 n+1 行;第一行位正整数 n,表示迷宫的行数及列数;接下来 n 行,每行 n 个数,表示对应的格子是否可以通过。
输出格式
路径总数。
输入样例
3
0 0 0
0 1 1
1 0 0
输出样例
2
提示说明
【数据说明】
100%数据满足:2<=n<10。
#include <bits/stdc++.h>
using namespace std;
int a[15][15];
int n;
int X[15]={-1,1,0,0,-1,-1,1,1};
int Y[15]={0,0,-1,1,-1,1,-1,1};
int sum=0;
void dfs(int x,int y)
{
if(x==1&&y==n)
{
sum++;
return ;
}
for(int i=0;i<=7;i++)
{
int nx=x+X[i],ny=y+Y[i];
if(nx>0&&nx<=n&&ny>0&&ny<=n)
if(a[nx][ny]==0)
{
a[nx][ny]=1;//biaoji
dfs(nx,ny);
a[nx][ny]=0;
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
a[1][1]=1;
dfs(1,1);
cout<<sum;
return 0; }
还是深搜,一开始我用search没写出来QaQ。
除了判断八个方向上各是0或1,还要判断会不会越界。
if(nx>0&&nx<=n&&ny>0&&ny<=n)
if(a[nx][ny]==0)
{
a[nx][ny]=1;//biaoji
dfs(nx,ny);
a[nx][ny]=0;
就是这个↑
————————————————————————————————————————
T2
部落卫队 洛谷P1692
题目描述
原始部落 byteland 中的居民们为了争夺有限的资源,经常发生冲突。几乎每个居民都有他的仇敌。部落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出最多的居民入伍,并保证队伍中任何 222 个人都不是仇敌。
给定 byteland 部落中居民间的仇敌关系,编程计算组成部落卫队的最佳方案。若有多种方案可行,输出字典序最大的方案。
输入格式
第 111 行有 222 个正整数 nnn 和 mmm,表示 byteland 部落中有 nnn 个居民,居民间有 mmm 个仇敌关系。居民编号为 1,2,⋯ ,n1,2, \cdots ,n1,2,⋯,n。接下来的 mmm 行中,每行有 222 个正整数 uuu 和 vvv,表示居民 uuu 与居民 vvv 是仇敌。
输出格式
第 111 行是部落卫队的人数;文件的第 222 行是卫队组成 xix_ixi,1≤i≤n1 \le i \le n1≤i≤n,xi=0x_i=0xi=0 表示居民 iii 不在卫队中,xi=1x_i=1xi=1 表示居民 iii 在卫队中。
#include <bits/stdc++.h>
using namespace std;
int v[10000],p[10000],sum,m;
struct c{
int b[1000],k;
}a[1000];
void dfs(int i,int s){
if(i==m+1){
if(s>sum){
memcpy(p,v,sizeof(v));
sum=s;
}
return;
}
if(!v[i]){
v[i]=1;
for(int j=0;j<a[i].k;j++)
v[a[i].b[j]]+=2;
dfs(i+1,s+1);
v[i]=0;
for(int j=0;j<a[i].k;j++)
v[a[i].b[j]]-=2;
}
dfs(i+1,s);
}
int main()
{ int n,x,y,i;
cin>>m>>n;
for(i=1;i<=n;a[x].b[a[x].k++]=y,i++)
cin>>x>>y;
dfs(1,0);
printf("%d\n",sum);
for(i=1;i<=m;i++)
if(p[i]==1)
printf("1 ");
else
printf("0 ");
}
一开始读题时很模糊,如果一个人与多个人都有仇该如何判断,是不是也可能放在队伍里。
花费很长时间,T1 T2差了三个小时。
————————————————————————————————————————
T3
最佳调度问题
题目
假设有n(n<=20)个任务由k(k<=20)个可并行工作的机器完成。完成任务i需要的时间为ti。 试设计一个算法,对任意给定的整数n和k,以及完成任务i 需要的时间为ti ,i=1~n。计算完成这n个任务的最佳调度,使得完成全部任务的时间最早。
输入格式:
输入数据的第一行有2 个正整数n和k。第2 行的n个正整数是完成n个任务需要的时间。
输出格式:
将计算出的完成全部任务的最早时间输出到屏幕。
#include <bits/stdc++.h>
using namespace std;
int a[105],s[1005];
int n,k,result;
int max(int x,int y){
if(x>y) return x;
else return y;
}
void search(int x,int y) {
int i
if(y>=result) return;
if(x>n) {
if(y<result) result=y;
return;
}
for(int i=1; i<=k; i++) { s[i]=s[i]+a[x];
search(x+1,max(y,s[i]));
s[i]=s[i]-a[x]; } }int main() {
cin>>n>>k;
for(int i=1; i<=n; i++)
cin>>a[i];
memset(s,0,sizeof(s));
result=INT_MAX;
search(1,0);
cout<<result;
return 0;
}
这道题主要就离谱在不管用什么方法,系统就是判断是超时,就是73分
————————————————————————————————————————
T4
图M的着色问题 洛谷P2819
题目背景
给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的。图的m着色问题是对于给定图G和m种颜色,找出所有不同的着色法。
题目描述
对于给定的无向连通图G和m种不同的颜色,编程计算图的所有不同的着色法。
输入格式
第1行有3个正整数n,k 和m,表示给定的图G有n个顶点和k条边,m种颜色。顶点编号为1,2,…,n。接下来的k行中,每行有2个正整数u,v,表示图G 的一条边(u,v)。
输出格式
程序运行结束时,将计算出的不同的着色方案数输出。
#include <bits/stdc++.h>
using namespace std;
int n,m,k,s,ks[10000];
int c[10000],e[10000],a[1000];
void search(int x){
if(x>n){
s++;
return;
}
int i;
bool b[1000];
i=ks[x];
memset(b,1,sizeof(b));
while(i!=0){
if(e[i]<x) b[a[e[i]]]=false;
i=c[i];
}
for(int i=1;i<=k;i++)
if(b[i]){
a[x]=i;
search(x+1);
}
}
int main(){
cin>>n>>m>>k;
int i,x,y;
for(i=1;i<=m;i++){
cin>>x>>y;
c[i]=ks[x];
ks[x]=i;
e[i+m]=y;
c[i+m]=ks[y];
ks[y]=i+m;
e[i+m]=x; }
s=0;
search(1);
cout<<s<<endl;
return 0;
}
2022寒假集训day4的更多相关文章
- 2022寒假集训day2
day1:学习seach和回溯,初步了解. day2:深度优化搜索 T1 洛谷P157:https://www.luogu.com.cn/problem/P1157 题目描述 排列与组合是常用的数学方 ...
- 【集训Day4 动态规划】【2018寒假集训 Day4 更新】蛙人
蛙人 (ple) 蛙人使用特殊设备潜水.设备中有一个气瓶,分两格:一格装氧气,另一格装氮气.留在水中有时间的限制,在深水中需要大量的氧气与氮气.为完成任务,蛙人必须安排好气瓶.每个气瓶可以用它的重量和 ...
- HZNU-ACM寒假集训Day4小结 最短路
最短路 1.Floy 复杂度O(N3) 适用于任何图(不存在负环) 模板 --kuangbin #include<iostream> #include<cstdio> #in ...
- 2022寒假集训day6
day6上午还是做四道题T1区域[上机练习]1.编程计算由"*"号围成的下列图形的面积.面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目.如下图所示,在 10*10 ...
- 2022寒假集训day5
day5 五道栈的题加上字符串. 单调队列. T1 表达式括号匹配 洛谷P1739 题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@&q ...
- 2022寒假集训day3
day3:四道检测题,花了大半天时间. T1 子集和问题 问题描述 子集和问题的一个实例为<S,c>.其中S={x1,x2,-,xn}是一个正整数的集合,c是一个正整数.子集和问题判定是否 ...
- Loj #6069. 「2017 山东一轮集训 Day4」塔
Loj #6069. 「2017 山东一轮集训 Day4」塔 题目描述 现在有一条 $ [1, l] $ 的数轴,要在上面造 $ n $ 座塔,每座塔的坐标要两两不同,且为整点. 塔有编号,且每座塔都 ...
- Loj 6068. 「2017 山东一轮集训 Day4」棋盘
Loj 6068. 「2017 山东一轮集训 Day4」棋盘 题目描述 给定一个 $ n \times n $ 的棋盘,棋盘上每个位置要么为空要么为障碍.定义棋盘上两个位置 $ (x, y),(u, ...
- loj6068. 「2017 山东一轮集训 Day4」棋盘 二分图,网络流
loj6068. 「2017 山东一轮集训 Day4」棋盘 链接 https://loj.ac/problem/6068 思路 上来没头绪,后来套算法,套了个网络流 经典二分图 左边横,右边列 先重新 ...
随机推荐
- docker构建.net core运行的镜像
在docker很火的今天,越来越多的应用现在都在往docker上迁移,.net core怎么能落后? 项目要运行在docker上,我们需要先制作镜像,可以基于centos来制作,当然也可以基于Ubun ...
- JS常见框架汇总
基础框架 Vue.js 官网地址 : http://cn.vuejs.org/ 官方简介 : Vue.js 是一套用于构建用户界面的渐进式框架. 框架类型 : 前端项目级框架 适用平台 : 通用 仓库 ...
- git 生成忽略文件
一.在.git的同级目录下打开git bash 二.在命令行输入 三.在生成的文件中添加忽略提交的文件夹名称 来自为知笔记(Wiz)
- Shell 中的 expect 命令
目录 expect 介绍 expect 安装 expect 语法 自动拷贝文件到远程主机 示例一 示例二 示例三 示例四 expect 介绍 借助 expect 处理交互的命令,可以将交互过程如 ss ...
- spring cloud --- config 从git 获取文件【 可能是yml或 properties】遇到有相同字段的取值规则
spring boot 1.5.9.RELEASE spring cloud Dalston.SR1 1.前言 昨天做了 spring cloud config 配置中心 获取存在gi ...
- 解决MySQL服务器禁止远程连接的问题
1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 " ...
- iOS二进制方案真实落地经验(30分钟降低到10分钟以内)
iOS二进制方案真实落地经验(30分钟降低到10分钟以内) 我们做iOS二进制化断断续续尝试了一年多了,来来回回换了三个架构师去尝试落地,今日完全落地,在此做个总结 背景 工程基于cocoapod的组 ...
- Python多线程、线程池及实际运用
我们在写python爬虫的过程中,对于大量数据的抓取总是希望能获得更高的速度和效率,但由于网络请求的延迟.IO的限制,单线程的运行总是不能让人满意.因此有了多线程.异步协程等技术. 下面介绍一下pyt ...
- RabbitMQ除开RPC的五种消模型----原生API
2.五种消息模型 RabbitMQ提供了6种消息模型,但是第6种其实是RPC,并不是MQ,因此不予学习.那么也就剩下5种. 但是其实3.4.5这三种都属于订阅模型,只不过进行路由的方式不同. 通过一个 ...
- SnackBar--FloatingActionButton--CoordinatorLayout
SnackBar snack:小吃,点心,快餐 btOpenSnackBar = (Button) findViewById(R.id.bt_openSnackBar); btOpenSnackBar ...