acm
single 君
求大佬carry
展开
-
混合背包问题
#include <bits/stdc++.h>using namespace std;const int N = 1010;int f[N];/*struct Good{ int v,w;}*/int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++){ int v,w,s; cin>>v>>w>>s;.原创 2022-03-02 13:03:10 · 136 阅读 · 0 评论 -
多重背包问题二进制优化解法
如果是一般方法是把n的物品切为n个1份,这样要超时,以二进制的形式切可以优化,多的部分提出来即可。#include<bits/stdc++.h>using namespace std;const int N=2010;int f[N];struct Good{ int v,w;};int main(){ int n,V; cin>>n>>V; vector<Good>goods; for(int i=0;i原创 2022-03-02 12:23:42 · 307 阅读 · 0 评论 -
C++打家劫舍系列最清晰简洁代码
可以构建动态规划方程: dp[i]=max(dp[i-2]+nums[i],dp[i-1])即分为抢了和没抢两个情况计算最大值class Solution {public: int rob(vector<int>& nums) { int n=nums.size(); if(n==1)return nums[0]; vector<int>dp(n+1); dp[0]=nums[0],dp[1.原创 2021-09-09 17:56:24 · 842 阅读 · 0 评论 -
leetcode组合总和
自己最初的代码class Solution {private: void dfs(vector<vector<int>>&res,vector<int>& candidates, int target,int sum,vector<int>temp){ if(sum>target)return; if(sum==target){ res.push_back(temp原创 2021-08-20 20:44:08 · 91 阅读 · 0 评论 -
leetcode算法训练第9天:子集
这里我们运用回溯实现每一次都有选与不选。class Solution {private: vector<vector<int>>res; vector<int>temp; void dfs(vector<int>& nums,int n,int cur){ if(cur==n){ res.push_back(temp); return; }..原创 2021-08-18 20:31:23 · 68 阅读 · 0 评论 -
leetcode算法基础训练第八天:dfs,回溯
主要是dir的应用,以及一层循环代表每一种路径往外走了一截,最先抵达了一种路径就不用算另外的了。class Solution {public: vector<vector<int>>dir={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}; int shortestPathBinaryMatrix(vector<vector<int>>& grid) { ..原创 2021-08-13 18:32:00 · 97 阅读 · 0 评论 -
leetcode算法训练第六天:深度优先搜索和广度优先搜索
深度优先搜索(递归)class Solution {private: void dfs(vector<vector<char>>& grid,int n,int r){ int nc=grid.size(); int rc=grid[0].size(); grid[n][r]='0'; if(n>0&&grid[n-1][r]=='1')dfs(grid,n-1,r); ..原创 2021-08-11 17:47:02 · 94 阅读 · 0 评论 -
leetcode算法训练第五天:滑动窗口
class Solution {public: vector<int> findAnagrams(string s, string p) { if(s.size()<p.size())return {};//提前排除情况 int l=0,r=-1;//定义左边界和右边界 vector<int>ana;//定义返回数组 vector<int>frep_s(26,0),frep_p(26.原创 2021-08-08 17:46:03 · 88 阅读 · 0 评论 -
leetcode算法训练第四天:双指针
用栈的思路最简单,普通字符弹入,#字符弹出。class Solution {public: bool backspaceCompare(string s, string t) { return build(s)==build(t); } string build(string k){ string res; for(char ch:k){ if(ch!='#'){ res..原创 2021-08-08 15:04:10 · 86 阅读 · 0 评论 -
leetcode算法基础训练第三天:双指针
class Solution {public: ListNode* deleteDuplicates(ListNode* head) { if(!head){ return head;//链表防范 } ListNode*dummy=new ListNode(0,head);//防止头结点被删除先弄个哑结点 ListNode*cur=dummy; while(cur->next&am.原创 2021-08-06 16:36:42 · 100 阅读 · 0 评论 -
leetcode算法训练第二天:二分查找
class Solution {public: int findMin(vector<int>& nums) { int low=0,high=nums.size()-1; while(low<high){ int mid=low+(high-low)/2; if(nums[mid]>nums[high])low=mid+1; else high=mid; ..原创 2021-08-05 16:51:29 · 66 阅读 · 0 评论 -
leetcode算法基础训练:第一天:二分查找
补充知识:利用二分思想先找其左边界,再找其右边界即可,注意找左边界的时候,由右侧逼近;找右边界的时候,由左侧逼近,即可。class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> res(2,-1); if(nums.empty()) return res; int n=nums原创 2021-08-04 17:25:01 · 122 阅读 · 0 评论 -
acm入门:多个样例输入问题
int main(){//typename KK a;while(cin>>a){...}}也可以有b,c等。例如:#include<iostream>using namespace std;int main(){ int a; while (cin >> a) { if (a == 1) { cout << a<<endl; } else if (a <= 10) { cout &l原创 2020-10-18 00:59:01 · 526 阅读 · 0 评论