题目1:

题目大意:求5*5二维矩阵的从左上角到右下角的最短路径

思路:结构体记录路径

//结构体记录路径
#include<iostream>
#include<algorithm>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<iostream>
#include<algorithm>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<string.h>
#include<map>
#include<vector>
#include<utility>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
typedef long long ll;
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define inf 0x3f3f3f
#define endl '\n'
#define F first
#define S second
const int N=1e3+10;
int a[10][10],vis[10][10];
int dx[4]={0,1,-1,0};
int dy[4]={1,0,0,-1};
struct point{int x,y,cnt;
}que[50];
int front=0;
int rear=0;
void bfs(int x1,int y1,int x2,int y2){que[0].x=x1;que[0].y=y1;que[0].cnt=-1;rear=rear+1;vis[x1][y1]=1;while(front<rear){for(int i=0;i<4;i++){int x=que[front].x+dx[i];int y=que[front].y+dy[i];if(x<0||x>5||y<0||y>5||a[x][y]==1||vis[x][y]==1)continue;que[rear].x=x;que[rear].y=y;que[rear].cnt=front;rear++;vis[x][y]=1;if(x==x2&&y==y2)return;}front++;}
}
void print(point now){if(now.cnt==-1)printf("(%d, %d)\n",now.x,now.y);else{print(que[now.cnt]);printf("(%d, %d)\n",now.x,now.y);}
}
int main(){for(int i=0;i<5;i++){for(int k=0;k<5;k++){cin>>a[i][k];}}bfs(0,0,4,4);/*for(int i=0;i<40;i++)cout<<"i="<<i<<" "<<que[i].x<<" "<<que[i].y<<" "<<que[i].cnt<<endl;cout<<"rear="<<rear<<endl;*/print(que[rear-1]);return 0;}​

2.棋盘问题

题目大意:在一个n*n方格里,放入k个棋子,要求任意两个棋子不能在同行同列,只有‘#'处能放棋子,问有多少种放棋子的方法

思路:简单dfs

1.在该位置放一个棋的时候,判断该位置是否能放棋(所在行列是否已经放过棋子,该位置是否是 #)

2.如果该点所在的行和列有棋,则跳过该点 (遍历下一列,如果该行的所有列都不能放棋,就遍历下一行。)

3.如果没有,就放在该点,并把该棋所在的行和列进行标记。

4.当完成一种摆放后 (k 个棋全部放完),记录一下,然后进行回溯,看是否有其他摆放方法。

#include<iostream>
#include<algorithm>
#include<math.h>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<string.h>
#include<map>
#include<vector>
#include<utility>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
typedef long long ll;
const int N=109;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,-1,1};
char a[10][10];
int vis[10];//标记这一列是否有棋子
int n,k,ans;
void dfs(int row,int cnt){if(cnt==k){ans++;return;}for(int i=row;i<n;i++){for(int j=0;j<n;j++){if(!vis[j]&&a[i][j]=='#'){vis[j]=1;dfs(i+1,cnt+1);vis[j]=0;}}}
}
int main(){while(~scanf("%d%d",&n,&k)){int wall=0;if(n+k==-2)break;for(int i=0;i<n;i++)scanf("%s",a[i]);memset(vis,0,sizeof(vis));for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(a[i][j]=='#')wall++;}}if(k>wall){printf("0\n");continue;}ans=0;dfs(0,0);printf("%d\n",ans);}return 0;
}
/*
5 4
..#.#
#..#.
.#..#
#.#.#
..###
*/

3.翻转问题

大意:有N头牛,有的朝前,有的朝后,现有一台转向器,设定K值,每次可使得[i,i+k-1]头牛转变朝向,问需要的最小转向次数和最小的K。

思路:首先,需要明白(1):交换区间反转的顺序对结果是没有影响的。(2):对同一个区间进行两次以上的反转是多余的。(3):第i头牛受前[i-k+1,i-1]头牛的影响。

变量解释:a[i]=1 ->朝后  a[i]=0 ->朝前

vis[i]=1->翻转  vis[i]=0->该点不翻

sum:受前[i-k+1,i-1]头牛的影响,第i头牛的翻转次数

res:总翻转次数

先遍历一遍,最后再遍历[n-k+1,n-1]

#include<iostream>
#include<algorithm>
#include<math.h>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<string.h>
#include<map>
#include<vector>
#include<utility>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
typedef long long ll;
const int N=5e3+5;
int n,ans;
char a[N];
int vis[N];
int judge(int k){memset(vis,0,sizeof(vis));int res=0,sum=0;for(int i=0;i+k<=n;i++){if((a[i]+sum)%2!=0){res++;vis[i]=1;//该位置翻转}sum+=vis[i];if(i-k+1>=0){sum-=vis[i-k+1];}}for(int i=n-k+1;i<N;i++){if((sum+a[i])%2!=0)return -1;if(i-k+1>=0)sum-=vis[i-k+1];}return res;
}
void solve(){int K=1,M=n;for(int i=1;i<=n;i++){int s=judge(i);if(s>=0&&M>s){M=s;K=i;}}printf("%d %d\n",K,M);
}
int main(){scanf("%d",&n);char ch;for(int i=0;i<n;i++){getchar();scanf("%c",&ch);if(ch=='B')a[i]='1';else a[i]='0';}solve();return 0;
}

4.P1065 [NOIP2006 提高组] 作业调度方案

5.P4447 [AHOI2018初中组]分组

自认为的经典题,难题,好题,方便日后复习相关推荐

  1. java经典算法四十题

    java经典算法四十题 [程序9]题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 ".例如6=1+2+3.编程找出1000以内的所有完数. public class W ...

  2. java经典50道_50道经典的JAVA编程题(41-45)

    50道经典的JAVA编程题(41-45),苦逼的程序猿,晚上睡不着了编程吧~今天坚持做10道题!发现编程能是我快乐...O(∩_∩)O哈哈~能平静我烦乱的心,剩下5道题留到考试完了再做吧!该睡觉了.. ...

  3. 算法面试:精选微软等公司经典的算法面试100题 第26-35题

    算法面试:精选微软等公司经典的算法面试100题 第26-35题 26.左旋转字符串 题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串abcdef左旋转2位得到字 ...

  4. c语言编程经典实例利润,C语言经典编程实例100题解答

    C语言经典编程实例100题 答案+答案 C语言经典编程实例100题C语言程序实例100个(一) [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数,都是多少, 1.程序 ...

  5. 质量不同的球java编程_荐非常经典的java编程题全集-共50题(1-10)...

    非常经典的java编程题 程序1:斐波那契数列问题 题目概述: 古典问题: 有一对兔子,从出生第三个月起每月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多 ...

  6. 全新整理:微软、谷歌、百度等公司经典面试100题[第1-60题]

    全新整理:微软.谷歌.百度等公司经典面试100题[第1-60题] 整理:July.二零一一年三月九日. 应网友承诺与要求,全新整理.转载,请注明出处. 博主说明: 此100题V0.2版,本人不再保证, ...

  7. 全新整理:微软、谷歌、百度等公司经典面试100题[第101-160题]

    全新整理:微软.谷歌.百度等公司经典面试100题[第101-160题] 整理:July.二零一一年三月九日. 应网友承诺与要求,全新整理.转载,请注明出处. 博主说明: 此100题V0.2版,本人不再 ...

  8. java编程50_荐非常经典的java编程题全集-共50题(1-10)...

    非常经典的java编程题 程序1:斐波那契数列问题 题目概述: 古典问题: 有一对兔子,从出生第三个月起每月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多 ...

  9. 微软、谷歌、百度等公司经典面试100题[第101-160题]

    全新整理:微软.谷歌.百度等公司经典面试100题[第101-160题] 整理:July.二零一一年三月九日. 应网友承诺与要求,全新整理.转载,请注明出处. 博主说明: 此100题V0.2版,本人不再 ...

  10. 学习Python必刷的100道经典实战练习真题(第010集 怎样对简单列表元素排序-第011集 怎样实现学生成绩排序)

    学习Python必刷的100道经典实战练习真题(第010集 怎样对简单列表元素排序-第011集 怎样实现学生成绩排序) 一,第010集 怎样对简单列表元素排序 二,第011集 怎样实现学生成绩排序 来 ...

最新文章

  1. 专利申请超全球!新崛起的中国人工智能,还有哪些你不知道的事
  2. 【LOJ】#3098. 「SNOI2019」纸牌
  3. 协同推荐算法没有这么复杂,真的
  4. 算法---FaceNet+mtcnn的使用记录
  5. Windows系统下彻底卸载MySQL数据库
  6. Lesson 001 —— 数据
  7. 分号可以用来分段么_更高效的GMX分段模拟方法:修改tpr文件
  8. 【Linux】Linux 守护进程的启动方法
  9. 横断面数据提取工具_SDTP_CAD断面数据处理教程
  10. ubuntu 安装GPU黑屏 修改GRUB_手把手教你Windows+Linux双系统的安装与卸载
  11. CEF与JavaScript交互读取电脑信息
  12. 注册美国iTunes账号步骤(跳过绑定银行卡)
  13. 网络远程计算机终止,电脑拨号上网出现错误629:连接被远程计算机终止怎么办...
  14. vi 和 vim 编辑器的使用
  15. C++ opencv视频处理与保存
  16. 数据透视表的切片器实现数据动态交互
  17. 手淘抓包、 x-sign的签名算法和api接口
  18. 文件隐藏服务器版本信息,隐藏Tengine的版本信息
  19. 第三方资源下载路径集合
  20. 平衡面板数据中的缺失值可以存在吗?

热门文章

  1. 三角测量计算三维坐标的代码_室内定位系统的三边测量与三角测量
  2. 简易抽签程序(数字滚动 HTML + JavaScript)
  3. 学好python需要学哪些知识_学习Python需要掌握哪些知识?
  4. 报童问题详细推导及利用Python的SAA方法求解
  5. sunlight的中文_Diana Vickers的Sunlight中文歌词。
  6. 快40岁了,我还要不要继续写代码呢?
  7. 西门子触摸屏HTML控件,西门子HMI触摸屏操作手册.pdf
  8. python 西门子触摸屏通讯_PLC通过以太网与触摸屏通讯
  9. 一梦江湖获取服务器信息卡住,一梦江湖手游2021年8月6日更新公告
  10. depends-on