二刷算法基础题DAY3

课程表Ⅱ:
题目链接

class Solution {
public:
    int m[2000][2000];
    int indegree[2000];

    vector<int> bfs(vector<int> res, int numCourses){
        queue<int> q;
        for(int i=0;i<numCourses;i++){
            if(indegree[i]==0){
                q.push(i);
                indegree[i]=-1;
            }
        }

        while(!q.empty()){
            int e=q.front();
            res.push_back(e);
            q.pop();
            for(int i =0;i<numCourses;i++){
                if(m[e][i]==1   &&--indegree[i]==0){
                    q.push(i);
                    indegree[i]=-1;
                }
            }
        }  
        
        for(int i=0;i<numCourses;i++){
            if(indegree[i]>0)   
                res.resize(0);
        }

        return res;
    }

    vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
        vector<int> res;
        for(int i=0;i<prerequisites.size();i++){
            m[prerequisites[i][1]][prerequisites[i][0]]=1;
            indegree[prerequisites[i][0]]++;
        }
        return bfs(res,numCourses);
    }
};

金币:(模拟)
题目链接

#include <iostream>
using namespace std;
int k;
int res;
int after_day_and_profit=1;
int now_day;

void dfs() {
	if (now_day + after_day_and_profit > k) {
		for (int i = 1; i <= k - now_day;i++) {
			res += after_day_and_profit;			
		}
		return;
	}
	res += after_day_and_profit * after_day_and_profit;
	now_day += after_day_and_profit;
	after_day_and_profit++;
	if (now_day == k) return;
	dfs();
}


int main() {
	cin >> k;
	dfs();
	cout<<res<<endl;
	return 0;
}

GCD

long long gcd(long long  a, long long b) {
	return b?gcd(b,a%b):a;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值