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的更多相关文章

  1. 2022寒假集训day2

    day1:学习seach和回溯,初步了解. day2:深度优化搜索 T1 洛谷P157:https://www.luogu.com.cn/problem/P1157 题目描述 排列与组合是常用的数学方 ...

  2. 【集训Day4 动态规划】【2018寒假集训 Day4 更新】蛙人

    蛙人 (ple) 蛙人使用特殊设备潜水.设备中有一个气瓶,分两格:一格装氧气,另一格装氮气.留在水中有时间的限制,在深水中需要大量的氧气与氮气.为完成任务,蛙人必须安排好气瓶.每个气瓶可以用它的重量和 ...

  3. HZNU-ACM寒假集训Day4小结 最短路

    最短路 1.Floy 复杂度O(N3)  适用于任何图(不存在负环) 模板 --kuangbin #include<iostream> #include<cstdio> #in ...

  4. 2022寒假集训day6

    day6上午还是做四道题T1区域[上机练习]1.编程计算由"*"号围成的下列图形的面积.面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目.如下图所示,在 10*10 ...

  5. 2022寒假集训day5

    day5 五道栈的题加上字符串. 单调队列. T1 表达式括号匹配   洛谷P1739 题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@&q ...

  6. 2022寒假集训day3

    day3:四道检测题,花了大半天时间. T1 子集和问题 问题描述 子集和问题的一个实例为<S,c>.其中S={x1,x2,-,xn}是一个正整数的集合,c是一个正整数.子集和问题判定是否 ...

  7. Loj #6069. 「2017 山东一轮集训 Day4」塔

    Loj #6069. 「2017 山东一轮集训 Day4」塔 题目描述 现在有一条 $ [1, l] $ 的数轴,要在上面造 $ n $ 座塔,每座塔的坐标要两两不同,且为整点. 塔有编号,且每座塔都 ...

  8. Loj 6068. 「2017 山东一轮集训 Day4」棋盘

    Loj 6068. 「2017 山东一轮集训 Day4」棋盘 题目描述 给定一个 $ n \times n $ 的棋盘,棋盘上每个位置要么为空要么为障碍.定义棋盘上两个位置 $ (x, y),(u, ...

  9. loj6068. 「2017 山东一轮集训 Day4」棋盘 二分图,网络流

    loj6068. 「2017 山东一轮集训 Day4」棋盘 链接 https://loj.ac/problem/6068 思路 上来没头绪,后来套算法,套了个网络流 经典二分图 左边横,右边列 先重新 ...

随机推荐

  1. Canvas原生API(纯CPU)计算并渲染三维图

    Canvas原生API(纯CPU)计算并渲染三维图 前端工程师学图形学:Games101 第三次作业 利用Canvas画三维中的三角形并使用超采样实现抗锯齿 最终完成功能 Canvas 原生API实现 ...

  2. Swoole 中使用 UDP 异步服务器、UDP 同步客户端、UDP 协程客户端

    UDP 异步风格服务器 # udp_server.php // 创建 UDP 服务器对象,监听0.0.0.0:9502端口,类型为SWOOLE_SOCK_UDP $serv = new Swoole\ ...

  3. centos7-collabora-office(在线文档编辑)

    1.wget https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-centos7/repodata/repomd.xml.key &a ...

  4. 在 CentOS 7 上安装和配置 Puppet

    1 准备 2台 centos7 (master/server:192.168.1.103 agent/client:192.168.1.106) 分别添加puppet自定义仓库 https://yum ...

  5. centos7 系统级别(持续更新)

    查看当前系统级别 runlevel 获取当前级别 systemctl get-default centos7中只能通过target来设置.先获取target列表 ls -l /usr/lib/syst ...

  6. Servlet部署描述符

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6512237744641540612/ <Servlet简单实现开发部署过程>中的过程,可以概括为以下模 ...

  7. LG1290 欧几里德的游戏

    https://www.luogu.com.cn/problem/P1290 博弈论游戏,用到mod. 辗转相除法的过程,会构成n种状态. 到达最后一个状态就赢了. 对于一次过程如果div>1那 ...

  8. 大型站点TCP/IP协议优化

    作为一个DAU上百万或千万的站点,不仅仅需要做好网站应用程序.数据库的优化,还应从TCP/IP协议层去进行相关的优化: 在我的工作中,曾使用到了以下的几种基本的优化方式: 增大最大连接数 在Linux ...

  9. 性能优化-使用双buffer实现无锁队列

    借助本文,实现一种在"读多写一"场景下的无锁实现方式 在我们的工作中,多线程编程是一件太稀松平常的事.在多线程环境下操作一个变量或者一块缓存,如果不对其操作加以限制,轻则变量值或者 ...

  10. 《剑指offer》面试题21. 调整数组顺序使奇数位于偶数前面

    问题描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 示例: 输入:nums = [1,2,3,4] 输出:[1,3,2,4] ...