课程表Ⅱ:
题目链接
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;
}