算法
Python ml
这个作者很懒,什么都没留下…
展开
-
3544. 小迷妹在哪儿 DP 01背包变体 贪心
小迷妹在哪儿选择相同迷妹的情况下,交换任意两个小迷妹的顺序可以列不等式证明性价比高的先找更优#include <algorithm>#include <iostream>#include <vector>using namespace std;struct fan{ int score; int time;};bool cmp(fan a,fan b){ //按性价比排序 return a.score*b.原创 2022-03-09 19:52:38 · 131 阅读 · 0 评论 -
砝码称重(DP)
#include <iostream>#include <algorithm>#include <vector>#include <math.h>using namespace std;//动态规划 构建一个二维数组 dp[i][target] 表示从0到达i的时候 能否构建成和为target的真假值 void judge(int sum,vector<int>& weight,vector<int>&tar原创 2022-03-03 19:50:30 · 408 阅读 · 0 评论 -
POJ 3278 抓住那头牛 (宽度优先搜索、队列实现)
POJ 3278 抓住那头牛#include <iostream>#include <algorithm>#include <queue>using namespace std;const int MAXN=1e5+10;bool visit[MAXN];struct Status{ int position; int time; Status(int p,int t):position(p),time(t){}};int B原创 2022-03-01 20:01:29 · 643 阅读 · 0 评论 -
全排列 (递归,回溯)
#include <iostream>#include <algorithm>using namespace std;const int MAXN=10;bool visit[MAXN];char sequence[MAXN];void GetPermutation(string s,int index){ if(index==s.size()){ for(int i=0;i<s.size();++i){ print原创 2022-03-01 17:04:04 · 126 阅读 · 0 评论 -
POJ 1328 雷达安装
POJ 1328 雷达安装#include <iostream>#include <algorithm>#include <cmath>using namespace std;const int MAXN=1000+10; struct Interval { double left; double right;};Interval arr[MAXN];bool cmp(Interval a,Interval b){ r原创 2022-03-01 12:12:07 · 182 阅读 · 0 评论 -
今年暑假不AC (区间贪心) 杭电oj
#include <iostream>#include <algorithm>using namespace std;const int MAXN=100; struct program { int startTime; int endTime;};bool cmp(program a,program b){ return a.endTime<b.endTime;}program arr[MAXN];int main() {原创 2022-03-01 11:20:27 · 169 阅读 · 0 评论 -
HDU 1874(Dijkstra算法+堆优化)
#include <iostream>#include <algorithm>#include <vector>#include <string.h>#include <queue>#include <climits>using namespace std;const int MAXN=200; //顶点数const int INF=INT_MAX;struct Edge{ //边的结构原创 2022-02-28 17:37:16 · 147 阅读 · 0 评论 -
最小生成树——Kruskal算法
#include <iostream>#include <algorithm>using namespace std;const int MAXN=100; //顶点数int father[MAXN];int height[MAXN];struct Edge{ //边的结构体 int from; int to; int length; bool operator < (const Edge &e原创 2022-02-28 16:06:07 · 202 阅读 · 0 评论 -
HDU 4508 湫湫系列故事——减肥记(完全背包)
拿了第i号物品后依然可以再拿第i号物品,考虑第i个物品的状态转移方程改一点#include <iostream>using namespace std;const int MAXN=100+10;const int MAXM=1e5+10;int dp[MAXN][MAXM];int weight[MAXN];int value[MAXN];int main() { int n,m; while (scanf("%d",&n)!=EOF){ .原创 2022-02-27 20:02:05 · 205 阅读 · 0 评论 -
01背包(动态规划)详解
最优子结构性质:大问题的最优解可以由小问题的最优解推出无后效性:一旦f(n)确定,如何凑出f(n)就再也用不着了如何判断一个问题能否使用DP解决:能将大问题拆成小问题,且满足无后效性、最优子结构性质DP为什么这么快:暴力解法是枚举所有的可能解,这是最大的可能解空间DP枚举有希望成为答案的解,这个空间比暴力小得多,即DP自带剪枝其核心思想就是尽量缩小解空间DP操作过程:(有记忆的递归)将一个大问题转化成几个小问题求解小问题推出大问题的解dp[i][j]表示考虑前i个物品在容重为j的情况原创 2022-02-27 17:47:23 · 402 阅读 · 0 评论 -
最长公共子序列
#include <iostream>using namespace std;const int MAXN=1000+10;string s1,s2;int fun1(int n,int m){ //直接递归,时间复杂度O(2^(n+m)) int answer; if(n==0||m==0) answer=0; else{ if(s1[n]=s2[m]) answer=fun1(n-1,m-1)+1; else ans..原创 2022-02-27 10:58:21 · 142 阅读 · 0 评论 -
Leetcode 206. 反转链表(Easy)
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* reverseList(struct ListNode* head){ if(head == NULL || head->next == NULL) return head; struct ListNode* pre=原创 2022-02-02 20:24:20 · 299 阅读 · 0 评论 -
约瑟夫问题
#include<iostream>using namespace std;int f(int n, int m){ return n == 1 ? n : (f(n - 1, m) + m - 1) % n + 1;}int main(){ int n,m; cin>>n>>m; cout<<f(n,m); system("pause"); return 0;}原创 2022-01-23 11:50:32 · 231 阅读 · 0 评论 -
PAT 1020 Tree Traversals (25 分)中序后序转(前序/层序)
#include <iostream>#include <algorithm>#include <vector>#include <map>using namespace std;vector<int> post, in;map<int, int> level;void pre(int root,int start,int end,int index){ //root子树根结点在后序中位置,start和end分别为子原创 2022-01-22 19:12:49 · 382 阅读 · 0 评论 -
PAT 1102 Invert a Binary Tree (25 分)
#include <iostream>#include <algorithm>#include <vector>using namespace std;struct node { int id, l, r, index, level;} a[100];vector<node> v1;bool cmp(node a,node b){ if(a.level!=b.level) return a.level<b.level;原创 2022-01-21 23:59:51 · 184 阅读 · 0 评论 -
PAT 1067 Sort with Swap(0, i) (25 分)
1067 Sort with Swap(0, i)#include <iostream>#include <vector>using namespace std;int main(){ int n,cnt=0; cin>>n; vector<int> a(n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } for(int i = 1原创 2022-01-20 19:22:34 · 303 阅读 · 0 评论 -
PAT 1037 Magic Coupon (25 分) 贪心
#include <iostream>#include <algorithm>#include <vector>using namespace std;int main(){ int Nc,Np,temp,res=0; scanf("%d",&Nc); vector<int> coupons(Nc); for(int i=0;i<Nc;i++){ scanf("%d",&coupo原创 2022-01-20 13:16:39 · 348 阅读 · 0 评论 -
两数相加 LeetCode (Easy)
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.LeetCode原题链接class Solution { public: ListNode* addTwoNumbers(ListNode*原创 2021-07-19 22:52:16 · 92 阅读 · 1 评论 -
LeetCode 最大子序和 (Easy)
最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:#include<iostream>#include<ve原创 2021-07-19 09:40:07 · 131 阅读 · 0 评论 -
两数之和 LeetCode (Easy)
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], target = 6原创 2021-07-15 22:40:19 · 69 阅读 · 0 评论 -
组合总和 LeetCode (medium)
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。#include<iostream>#include<vector>#include <algorithm>using namespace std;class Solution {原创 2021-07-15 19:51:33 · 180 阅读 · 0 评论 -
八皇后——回溯算法(51. N 皇后)
#include<iostream>using namespace std;int* queen = new int[8];int count=0;bool IsLegal(int currentrow, int currentcolum) { for (int precolum = 0; precolum < currentrow; precolum++) { int row = queen[precolum]; if (row原创 2021-07-02 18:56:55 · 93 阅读 · 0 评论