全部评论 
 题目过几天应该会放出来给大家练习
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
    
    int a,b;
    scanf("%d%d", &a, &b);
    vector<int> ans(a, 0),tmp(a,1);
    for (int i = 0;i<a;i++)
    {
        scanf("%d", &ans[i]);
    }
    for (int i = 1;i<a;i++)
    {
        for (int j = 0;j<i;j++)
        {
            if (ans[i]>=ans[j])
            {
                tmp[i] = max(tmp[i], tmp[j] + 1);
            }
        }
    }
    cout << *max_element(tmp.begin(), tmp.end())+b-1;
}
//第四题答案,刚才转念一想,做复杂了。因为是重复的序列,我本来是在全局序列之中求最长上升子序列
其实只需在第一个序列之中求最长上升序列,并且其中的最大元素在后面的每个序列之中一定存在,顾加上
b-1。
#include <iostream> using namespace std; const int mod = 1e9 + 7; int dp_1[10000],dp_2[10000]; int main() {     int n;     cin >> n;     dp_1[0] = 10;     for (int i = 1;i<n;i++)     {         dp_1[i] = dp_1[i - 1] * 10;     }     dp_2[0] = dp_1[0];     dp_2[1] = dp_1[1];     for (int i = 2;i<n;i++)     {         dp_2[i] = (dp_1[i] + dp_2[i - 2])%mod;         for (int j = 1;j<n-1;i++)         {             dp_2[i] += (dp_2[j] * dp_2[i - j - 1])%mod;         }         dp_2[i] %= mod;     }     cout << dp_2[n - 1]; } 第二题答案。 不能检测了,不敢说对。但思想没毛病。dp_1表示只有字符的情况。dp_2[i]要加上dp_2[i-2], 是考虑括号。最后的循环是考虑加号。
https://www.jianshu.com/p/0b0f11b89982     第二题还是没什么思路
这些题感觉非竞赛选手会做自闭的 ……
//第一题 dfs import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class test1 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int num = scan.nextInt();
        Queue<Integer>[] queue = (LinkedList<Integer>[]) new LinkedList[num+1];
        for (int i = 1; i <= num; i++){
            queue[i] = new LinkedList<>();
        }
        for (int i = 1; i <= num; i++){
            int k = scan.nextInt();
            while (k != 0){
                queue[i].add(k);
                queue[k].add(i);
                k = scan.nextInt();
            }
        }
        boolean[] marked = new boolean[num+1]; //维护一个标记数组
        int count = 0;
        for (int i = 1; i <= num; i++){
            if (!marked[i]) {
                dfs(queue, marked, i);
                count++;
            }
        }
        System.out.println(count);
    }
    public static void dfs(Queue<Integer>[] queue, boolean[] marked, int v){
        marked[v] = true;
        for (int w : queue[v]){
            if (!marked[w]) {
                dfs(queue, marked, w);
            }
        }
    }
}
//第一题并查集思路,供参考
#include <stdio.h>
#define N 100020
int friends[N];//每个人所属的连通分量,即构成朋友树时每个人的父节点
int rank[N];//连通分量的权值,即朋友树的大小
int res;
void init(int n)//初始化initialization
{
    for(int i=0;i<n;i++)
    {
        friends[i]=i;
        rank[i]=0;
    }
}
int findRoot(int x)//寻找x所属的朋友树的根节点
{
    //一直向上遍历寻找根节点
    while(x != friends[x])
        x = friends[x];
    return x;
}
void connect(int x,int y)
{
    int xRoot = findRoot(x);
    int yRoot = findRoot(y);
    if(xRoot == yRoot)
        return ;
    //判断树高,小树并在大树下
    if(rank[xRoot] < rank[yRoot])
        friends[xRoot]=yRoot;
    else
    {
        friends[yRoot] = xRoot;
        if(rank[xRoot]==rank[yRoot])//两树高相等,合并后树高+1
            rank[xRoot]++;
    }
    --res;
}
int main()
{
       int n;
    init(N);//初始化
    scanf("%d",&n);
    res = n;
    for(int i=1;i<=n;i++){
        int t;
        while(~scanf("%d",&t)){
            if(t == 0)
                break;
            connect(i,t);
        }
    }
    printf("%d",res);
    return 0;
}
//第一题DFS思路,空间还能优化,没提交,不知道对不对
#include <iostream>
#include <vector>
using namespace std;
int n;
int res;
void dfs(vector<vector<int>>& friends, int x, int y,vector<vector<bool>>& mark){
    if(x >=  friends.size() || y >= friends[0].size() || x < 0 || y < 0)
        return;
    if(mark[x][y] == true)
        return;
    if(friends[x][y] == 0){
        mark[x][y] = true;
        return;
    }
    // 对于已经搜索过的点要进行标记
    mark[x][y] = true;
    res--;
    for(int j=1; j<n; j++){
        dfs(friends, x, j, mark);
    }
}
void minM(vector<vector<int>>& friends) {
    if(friends.empty())
        return;
    res = n;
    vector<vector<bool>> vecMark(friends.size(),vector<bool>(friends[0].size(),false));// 定义标记数组
    //开始搜索
    for(int i = 1;i < friends.size();i++){
        for(int j = 1;j < friends[0].size();j++){
            if(vecMark[i][j] == true)
                continue;
            if(friends[i][j] == 0){
                vecMark[i][j] = true;
                continue;
            }
            dfs(friends, i, j, vecMark);
        }
    }
    cout << num << endl;
}
int main()
{
    cin >> n;
    vector<vector<int>> friends(n+1, vector<int>(n+1,0));
    int temp = 0;
    for(int i=1; i<=n; i++){
        int j = 1;
        while(cin>>temp){
            if(temp == 0)
                break;
            friends[i][j] = temp;
            j++;
        }
    }
    minM(friends);
    return 0;
}
太难了
第五题我看输出格式就没有做的动力了。
我也截图留下来了 两次都有(笑哭)
坐等答案。
坐等答案!!
等答案+1
第三题读取一直有问题...最后没有回车怎么解决
等答案
第一题不是bfs么?各种超时
等答案
抢沙发,等解答
相关推荐
10-29 16:42
  门头沟学院 Java  1.今天什么国标的公司打电话约面试,还得准备ppt,好麻烦,网上查薪资一般,打算拒了,不面了2.字节又复活了,什么安全开发,也不知道怎么样,面一面试试吧,还是挺想去字节的,但好难,随缘吧所以今天没面试
嵌入式的小白:面试前可以好好准备下
1.看看你投递的岗位的岗位描述,分析下是哪个业务线,同使要罗列他们描述中提到的技术点
2.根据1中的两点准备
3.岗位描述中应该还有语言要求,这个刷刷八股,要是对自己语言能力很有把握,那就不用看这点了
4.找下你简历中项目部分,看有没有和岗位描述中技术点重合的,这种在面试提到项目时,是高概率问题
好好准备,祝你面试顺利
 点赞 评论 收藏   
分享
 
