2024/4/9

概况

C++常用vector<vector<int> res(m,vector<int>(n,0));来初始化一个m*n且内部初始值为0的二维数组

P8665 [2018 省 A] 航班时间

本题需要读取比较复杂格式的数据以及,含前导0的数据,此时应当使用scanf,以及不能关闭同步流,全部化成秒防止出现复杂的借位问题,%02d表示读两位若前面有0则也读入,输出则是前面补0

#include <bits/stdc++.h>
using namespace std;

int get(){
	int h1,m1,s1,h2,m2,s2,day=0;
	scanf("%02d:%02d:%02d %02d:%02d:%02d",&h1,&m1,&s1,&h2,&m2,&s2);
	if(getchar()==' '){//没有读到空格就是换行符
		scanf("(+%d)",&day);
	}
	return 24*3600*day+h2*3600+m2*60+s2-(h1*3600+m1*60+s1);
}

int main(){
	int n;
	scanf("%d",&n);
	while(n--){
		int sec=(get()+get())/2;
		printf("%02d:%02d:%02d\n",sec/3600,sec%3600/60,sec%60);
	}
	return 0;
}
P8681 [2019 省 AB] 完全二叉树的权值

经典BFS题,将当前层内结点权值之和相加,并更新最大权值的层数即可

#include <bits/stdc++.h>
using namespace std;
int n,ans=1;
const int N=1e5+7;
int a[N];

void solve(){
	queue<int> q;
	int w=a[1],dep=0;
	q.push(1);
	while(q.size()){
		int t=q.size(),tmp=0;//tmp存当前层的权重
		dep++;//深度加一
		for(int i=0;i<t;i++){
			int d=q.front();//取出子节点
			q.pop();
			tmp+=a[d];
			if(2*d<=n) q.push(2*d);
			if(2*d+1<=n) q.push(2*d+1);
		}
		if(tmp>w) w=tmp,ans=dep;//更新
	}
}

int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	solve();
	cout<<ans;
}
leetcode 746.使用最小花费爬楼梯

本题明确最顶层是由下一层和下二层中花费最小的花费而来,同时站在一号台阶和零号台阶没有花费,所以初始化为0,更据状态转移方程从前往后循环即可

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        vector<int> dp(1001,0);//表示第i层阶梯的最低花费
        dp[0]=0;
        dp[1]=0;//两个台阶不用花费
        for(int i=2;i<=cost.size();i++){//循环size到最顶层
            dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
        }
        return dp[cost.size()];
    }
};
leetcode 62.不同路径
class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<vector<int>> dp(m,vector<int>(n,0));
        dp[0][0]=1;
        for(int i=0;i<m;i++)
        for(int j=0;j<n;j++){
            if(i-1>=0) dp[i][j]+=dp[i-1][j];
            if(j-1>=0) dp[i][j]+=dp[i][j-1];
        }
        return dp[m-1][n-1];
    }
};

这种写法不太规范,一般都是先初始化dp[i][0]和dp[0][j]为1也就是刚开始右边和下面一条路径都是一种方案,接着遍历1到m和1到n dp[i][j]=dp[i-1][j]+dp[i][j-1]即可

leetcode 63.不同路径II

本题初始化时要特判条件可能起点就有障碍物,因此起点值的初始化要进行特判

其他只需在递推时判断当前点是否是障碍物即可

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int m=obstacleGrid.size(),n=obstacleGrid[0].size();
        vector<vector<int>> dp(m,vector<int>(n,0));
        if(!obstacleGrid[0][0])
        dp[0][0]=1;
        else dp[0][0]=0;
        for(int i=1;i<m;i++) if(!obstacleGrid[i][0]) dp[i][0]=dp[i-1][0];
        for(int i=1;i<n;i++) if(!obstacleGrid[0][i]) dp[0][i]=dp[0][i-1];//初始化
        for(int i=1;i<m;i++)
        for(int j=1;j<n;j++){
            if(!obstacleGrid[i][j]) dp[i][j]=dp[i-1][j]+dp[i][j-1];
        }
        return dp[m-1][n-1];
    }
};

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-10 01:20:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-10 01:20:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-10 01:20:03       87 阅读
  4. Python语言-面向对象

    2024-04-10 01:20:03       96 阅读

热门阅读

  1. Linux系统部署搭建AI私人知识库助手教程

    2024-04-10 01:20:03       35 阅读
  2. 工业通信原理——Modbus-TCP通信规约定义

    2024-04-10 01:20:03       29 阅读
  3. 网络基础——路由协议对比

    2024-04-10 01:20:03       39 阅读
  4. 前端saas化部署

    2024-04-10 01:20:03       33 阅读
  5. 【算法 & 动态规划 &路径问题】二维dp问题

    2024-04-10 01:20:03       39 阅读
  6. c++找最高成绩

    2024-04-10 01:20:03       34 阅读
  7. GraphVis的使用

    2024-04-10 01:20:03       42 阅读
  8. 从零开始学ChatGLM2-6B 模型基于 P-Tuning v2 的微调

    2024-04-10 01:20:03       33 阅读
  9. QT及C++中引用的用法和意义

    2024-04-10 01:20:03       31 阅读
  10. [ LeetCode ] 题刷刷(Python)-第70题:爬楼梯

    2024-04-10 01:20:03       37 阅读
  11. 大数据在医疗信息化中的应用

    2024-04-10 01:20:03       32 阅读
  12. 前端小白学习Vue2框架(一)

    2024-04-10 01:20:03       36 阅读