自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 2021-02-08

读入之后先用sort排序,然后用两个指针一起向中间走,每次选择都尽可能的让当前状态下最大的和最小的分在一组,如果不行就最大的单独分一组,这样贪心下来就是最少分的组了 int a[1000000],ans; int main(){ int n,w; scanf("%d",&w); scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]);//读入 sort(a,a+n);.

2021-02-08 19:04:16 67

原创 2021-02-08

看完题目用最小生成树做了 int n,m; struct node{ int x,y,z; }e[10050]; int cmp(node a,node b)为下面sort函数服务 { return a.z<b.z; } int Find(int x) { if(x!=fa[x])return fa[x]=Find(fa[x]); return fa[x]; } int main() { cin>>n>>m; for(.

2021-02-08 18:51:19 55

原创 2021-02-05

看清题干无非是要按大到小排,生日相同时进行特判,用结构体和sort 函数 using namespace std; struct node//结构体排序 { string s;//名字 int n,y,r,num;//年,月,日,输入的编号。 }a[110]; int n; bool cmp(node a,node b){ if(a.year != b.year) return a.year < b.year;//如果出生年份不相等便直接按照年份进行排序 else{ if(a.mon !.

2021-02-05 20:48:28 51

原创 2021-02-05

由于本提的数据对于 100%100% 的数据,n≤5000, a≤50, b≤200, x ​ ≤280, y ≤100。 直接用桶排序最简便 最快捷 #include<iostream> using namespace std; int a[105];//定义一百个桶子,a[i]代表用i个力气能摘到的苹果的数目 int main(){ int n,s,h,k,j,l,t=0; cin>>n>>s>>h>>k; h=h.

2021-02-05 20:18:44 60

原创 2021-02-01

一题暴力枚举 题意4根木棒组成一个正三角形,则必有 2根长度相等。 并且另外2根长度之和,等于 前2根相等的木棒的长度。 cin>>n; for(int i=1; i<=n; i++) { cin>>a[i];//输入 minn=min(minn,a[i]);//找n根最小 maxx=max(maxx,a[i]);//找n根最大 b[a[i]]++;算出相同长度几根 } for(int i=minn+1; i<=maxx; i++)最小长度开始量.

2021-02-01 16:58:06 46 1

原创 2021-01-29

连续编号为 1-n的 n个房间,每个房间关押一个犯人,有 M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 设所有情况为全集u,越狱情况为集合a,不越狱集合为b 求a很困难 不如求u-b=a u=m的次幂 b=m*(m-1)的n-1次幂 但是直接写仍然超时 只能使用快速幂才能通过 long long n,m; long long pow(long long a,long long b) { if(b==1) return a%p; .

2021-01-29 14:47:00 51

原创 2021-01-28

那么,我们假设n[i]为结尾在第ii个格子的最优解,用ans数组来表示这些数(即ans[i]表示这个集合中的第i个数),那么很显然,答案就是ans[n]。 ,如果我们在第i个格子,那么我们可以选择在第ii−1个格子的最优解+第i个格子的值,或第i个格子的值或0。 #include<bits/stdc++.h> using namespace std; int main() { int n[200005],p,ans[200005]={0}; int sum=-9999999; .

2021-01-28 21:37:47 39

原创 2021-01-27

用结构体排序 将木棍的某一属性按照从大到小的顺序进行排列(长度优先) 需要注意的是,如果在两根木棍长度相等的情况下,必须要按宽度排序 在排序后,我们直接可以扔到这个长度不管了,直接把宽度跑一遍最长不上升子序列,得出最长不上升子序列的个数。但是我们知道,最长不上升子序列的个数等于最长上升子序列的长度, struct Stick { int l, w; }t[5050]; // 首先定义一个结构体,存放木棍的长度和宽度. int n, dp[5050]; // 然后定义木棍的数量 n 和 dp 数组. bo.

2021-01-27 18:22:33 43

原创 2021-01-26

175438 //删掉7 15438 //删掉5 1438 //删掉4 138 //删掉8 13 这一道贪心的题 找到如何去判断才能最优 经过反复推敲 发现从左起如果第 i 个数比第 i-1大我们就删掉第i个 题目并没有很明确的说要去掉前导零,但是事实上数据是要去 int main() { cin>>s; scanf("%d",&n); int len=s.length();//看一下有多少位 for(int i=0;i<len;i++) .

2021-01-26 21:12:10 62

原创 2021-01-23

这题主要是lcs转换为lis的巧妙之处 3←1,2←2,1←3,4←4,5←5对应转换后 变成 12345 32145 那就转换成求最长不降子序列序 int main() { int n; scanf("%d",&n); int x; for (int i=1;i<=n;i++) { scanf("%d",&x); m[x]=i; } for (int i=1;i<=n;i++) { scanf("%d",&a[i]); a[i]=m[a.

2021-01-23 22:05:05 46

原创 2021-01-21

今天在B站上学习了最小生成树的prim和kruskal两种算法的概念 然后去洛谷找题做 用了kruskal算法进行解题 有了思路和想出核心代码的模式 还在讨论区找到一篇对我理解帮助很大的详细题解 #include<bits/stdc++.h> using namespace std; int n,m,ans=0,father[5001]; struct fkt{int x;int y;int value;}a[200001]; bool cmp(fkt xx,fkt yy){//首先Kru

2021-01-21 18:22:01 55

原创 2021-01-19

对比赛超时题目进行总结 #include <bits/stdc++.h> using namespace std; int main() { char s[1000000]; cin >> s; int length = strlen(s); int i, j, n; for (i = 0; i < length; i++) for (j = i + 1; j < length; j++) {

2021-01-19 22:07:31 43

原创 2021-01-16

一道线性动态规划的题 刚开始没看懂输入输出为啥能拦截6个导弹 后来才知道中间的导弹可以跳过 就是一个查找最长不升子序列 第二问也可以转化成最长升子序列 然后这道题就可以解了 #include<bits/stdc++.h> using namespace std; int n; int len; //记录最长不升子序列即x数组的长度) int a[100005]; //存所有的导弹 int x[100005]; //存当前拦截的导弹的高度 int main(){ .

2021-01-16 23:28:07 53

原创 2021-01-15

稍加分析就能发现,要到达棋盘上的一个点,只能从左边或上面过来(以下称为左点和上点)可以得到核心方程f[i][j]=f[i-1][j]+f[i][j-1] 但是当我写出代码去一直没能通过 后面反复找才发现是越界的问题 最后条件特判边界得以解决 #include<bits/stdc++.h> using namespace std; long long f[40][40],flag[40][40];一个标记 一个来dp int main() { int n,m,i,j,a,b; .

2021-01-15 21:14:30 79 1

原创 2021-01-14

今天刷了一些贪心的题 从地面跳到最高的一定比其它的高度差要大,其次最高的跳到第二低的一定只比从最低的跳到最高的高度差小,比其他的要大,所以我们得到了贪心策略。 每一步考虑当前最优解(高度差最大) 然后选择该石头跳上去 把已经跳过的标记一下 最后发现只要排序 排序后非常简单代码如下 #include<bits/stdc++.h> using namespace std; long long n,A[301]={0},ans; int main(){ cin>>n; f

2021-01-14 22:34:43 50

原创 2021-01-13

看到题目就知道是01背包问题 但是之前没理解于是去看视频重新学习 下面是我学习后通过这题的代码 #include<bits/stdc++.h> using namespace std; int dp[105][1005],w[105],v[105],t,m; int main() { scanf("%d%d",&t,&m); for(int i=1;i<=m;i++) { scanf("%d%d",&w[i],&v[i]); } for(.

2021-01-13 16:32:13 72

原创 2021-01-11

刚开始觉得只是简单的递归 #include<bits/stdc++.h> using namespace std; int f(int n); int main() { int n; cin>>n; int m; m=f(n); cout<<m; } int f(int n) { int m; if(n==1) m=1; else if(n==2) m=2; else m=f(n-.

2021-01-11 21:40:57 53

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除