![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
洛谷
【杰杰】
这个作者很懒,什么都没留下…
展开
-
P1004 [NOIP2000 提高组] 方格取数
传送门题意:给你一个n∗nn*nn∗n的矩阵,问你先后两次从左上角走到右下角,途中获取对应值,最多获得的值是多少。思路:类似于只走一次从左上角走到右下角的题,这题只需要枚举两个点在不同位置的最大值进行递推即可。用dp[i][j][k][l]dp[i][j][k][l]dp[i][j][k][l]表示走到(i,j)和(k,l)(i,j)和(k,l)(i,j)和(k,l)时的最大值。#include<bits/stdc++.h>#define ll long longusing na原创 2021-10-14 22:57:07 · 150 阅读 · 0 评论 -
道路重建
传送门思路:将未被毁坏的道路长度设置为0;#include<bits/stdc++.h>using namespace std;#define ll long long int g[1010][1010];int ma[1010][1010];const int inf = 0x3f3f3f3f;int n,m;int dis[1010];bool vis[1010];void dij(){ for(int k = 1; k <= n; k++) { f原创 2021-04-30 23:44:26 · 121 阅读 · 1 评论 -
NASA的食物计划
传送门思路:dp(a,b)表示v体积m质量食物所能有的最大卡路里。#include<bits/stdc++.h>using namespace std;int vi[410];int mi[410];int w[410];int dp[410][410];int main(){ int v,m; cin>>v>>m; int n; cin>>n; for(int i = 1; i <= n; i++) { cin&g原创 2021-04-28 23:37:06 · 100 阅读 · 0 评论 -
好奇怪的游戏
传送门#include<bits/stdc++.h>using namespace std;int a[12]={1,1,2,2,2,2,-1,-1,-2,-2,-2,-2};int b[12]={-2,2,-2,-1,1,2,-2,2,-1,1,-2,2};struct node{ int x,y,step;};queue<node>q;int vis[50][50];int bfs(int x1,int y1,int ans){ while(!q.emp原创 2021-04-28 23:29:24 · 110 阅读 · 0 评论 -
合唱队形
传送门思路:从左到右求出1到i的最长上升子序列的长度,再求出1到n的最长下降子序列,最后枚举要求中的最大值。#include<bits/stdc++.h>#define ll long longusing namespace std;int a[110];int dp[110];int dp2[110];int dp3[110];int main(){ int n; cin>>n; for(int i = 1; i <= n; i++) {原创 2021-04-15 21:10:58 · 72 阅读 · 0 评论 -
P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G
传送门思路:用优先队列(从小到大排序)储存数据,然后每次取出队顶的两个元素相加再放入队中,直到队中只剩下一个元素。#include<bits/stdc++.h>using namespace std;# define ll long longpriority_queue<int,vector<int>,greater<int> >a;int main(){ int n; scanf("%d",&n); for(int i = 1原创 2021-03-05 11:40:08 · 128 阅读 · 0 评论 -
P1223 排队接水
传送门思路:用结构体储存相同用时的人的位置,在由小到大排。#include<bits/stdc++.h>using namespace std;struct node{ int a; int pos[1010]; int k;}stu[1010];bool cmp(node a, node b){ return a.a < b.a;}int num[1010];int main(){ int n; scanf("%d",&n); for(in原创 2021-03-05 11:19:54 · 67 阅读 · 0 评论 -
P1803 凌乱的yyy / 线段覆盖
传送门思路:先按照结束时间从小到大排序,然后选择第一个比赛,接着标记所有与第一个比赛时间重复的比赛,并选择未标记比赛中的第一个比赛,然后重复上述流程。#include<bits/stdc++.h>using namespace std;struct node{ int sta; int end;}tim[1000010];bool vis[1000010];bool cmp(node a, node b){ return a.end < b.end;}int原创 2021-03-04 16:08:13 · 163 阅读 · 1 评论 -
P1094 [NOIP2007 普及组] 纪念品分组
传送门思路:先排序,每次都让最大的和最小的组合,若结果大于w,则继续让最小的和次大的组合,组合成功则ans++。#include<bits/stdc++.h>using namespace std;int a[30010];bool vis[30010];int main(){ int w,n; scanf("%d%d",&w,&n); for(int i = 1; i <= n; i++) { scanf("%d",&a[i]);原创 2021-03-04 15:46:36 · 114 阅读 · 1 评论 -
P1331 海战
传送门思路:先输入 ,然后再从头开始把整个图过一遍,如果发现有任意4个块内只有三个‘#’,则跳出循环并输出“Bad placement”,否则以每个块的右下角为基准,判断其是否为一个块。#include<bits/stdc++.h>#include<algorithm>using namespace std;const int mod = 1e9 + 7;const int inf = 0x3f3f3f3f;#define ll long long cha原创 2021-03-04 14:25:27 · 97 阅读 · 1 评论 -
P4057 [Code+#1]晨跑
传送门思路:由公式:a*b = gcd(a,b) * lcm(a,b)解决#include<bits/stdc++.h>using namespace std;const int mod = 1e9 + 7;const int inf = 0x3f3f3f3f;#define ll long long int main(){ ll a,b,c; scanf("%lld%lld%lld",&a,&b,&c); ll i = a * b /原创 2021-03-03 14:56:39 · 45 阅读 · 1 评论 -
P2256 一中校运会之百米跑
传送门思路:变种后的并查集,用map<string,string>来存。#include<bits/stdc++.h>using namespace std;const int mod = 1e9 + 7;const int inf = 0x3f3f3f3f;#define ll long long map<string,string>f;string find(string x){ if(f[x] != x) return f[x]原创 2021-03-03 13:53:20 · 82 阅读 · 0 评论 -
P1536 村村通
传送门题目描述某市调查城镇交通状况,得到现有城镇道路统计表。表中列出了每条道路直接连通的城镇。市政府 “村村通工程” 的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要相互之间可达即可)。请你计算出最少还需要建设多少条道路?输入格式输入包含若干组测试测试数据,每组测试数据的第一行给出两个用空格隔开的正整数,分别是城镇数目 n 和道路数目 m ;随后的 m 行对应 m 条道路,每行给出一对用空格隔开的正整数,分别是该条道路直接相连的两个城镇的编号。简单起见,城镇从 1 到 n原创 2021-03-02 18:01:55 · 130 阅读 · 0 评论 -
P2835 刻录光盘
传送门思路:单向并查集,因为不会,所以用了floyd。#include<bits/stdc++.h>using namespace std;const int mod = 1e9 + 7;const int inf = 0x3f3f3f3f;#define ll long long int f[1010];bool g[210][210];int n;void floyd(){ for(int k = 1; k <= n; k++) { for(原创 2021-03-02 17:04:56 · 114 阅读 · 0 评论 -
P5019 [NOIP2018 提高组] 铺设道路
传送门题目描述春春是一名道路工程师,负责铺设一条长度为 nn 的道路。铺设道路的主要工作是填平下陷的地表。整段道路可以看作是 nn 块首尾相连的区域,一开始,第 ii 块区域下陷的深度为 di。春春每天可以选择一段连续区间[L,R]填充这段区间中的每块区域,让其下陷深度减少 1。在选择区间时,需要保证,区间内的每块区域在填充前下陷深度均不为 0。春春希望你能帮他设计一种方案,可以在最短的时间内将整段道路的下陷深度都变为 0。输入格式输入文件包含两行,第一行包含一个整数 nn,表示道路的长度。 第二行原创 2021-03-02 15:58:28 · 183 阅读 · 0 评论 -
P4995 跳跳!
传送门思路:先对高度排序,然后再跳高的,然后跳低的,循环往复。#include<bits/stdc++.h>using namespace std;const int mod = 1e9 + 7;#define ll long long int h[100010];int main(){ int n; scanf("%d",&n); for(int i = 1; i <= n; i++) { scan原创 2021-03-01 15:13:35 · 68 阅读 · 0 评论 -
P3817 小A的糖果
传送门题目描述小 A 有 n个糖果盒,第 ii 个盒中有 ai颗糖果。小 A 每次可以从其中一盒糖果中吃掉一颗,他想知道,要让任意两个相邻的盒子中糖的个数之和都不大于 x,至少得吃掉几颗糖。输入格式输入的第一行是两个用空格隔开的整数,代表糖果盒的个数 n 和给定的参数 x。第二行有 nn 个用空格隔开的整数,第 ii 个整数代表第 ii 盒糖的糖果个数 ai 。输出格式输出一行一个整数,代表最少要吃掉的糖果的数量。思路:贪心,从第二个开始遍历,每次判断当前盒子和上一个盒子的糖果数是否超出原创 2021-03-01 14:58:32 · 459 阅读 · 0 评论 -
P1678 烦恼的高考志愿
传送门题目背景计算机竞赛小组的神牛V神终于结束了万恶的高考,然而作为班长的他还不能闲下来,班主任老t给了他一个艰巨的任务:帮同学找出最合理的大学填报方案。可是v神太忙了,身后还有一群小姑娘等着和他约会,于是他想到了同为计算机竞赛小组的你,请你帮他完成这个艰巨的任务。题目描述现有 m 所学校,每所学校预计分数线是 ai 。有 n位学生,估分分别为 bi根据n位学生的估分情况,分别给每位学生推荐一所学校,要求学校的预计分数线和学生的估分相差最小(可高可低,毕竟是估分嘛),这个最小值为不满意度。求所有学生原创 2021-02-28 21:03:27 · 113 阅读 · 0 评论 -
P2078 朋友
传送门题目背景小明在A公司工作,小红在B公司工作。题目描述这两个公司的员工有一个特点:一个公司的员工都是同性。A公司有N名员工,其中有P对朋友关系。B公司有M名员工,其中有Q对朋友关系。朋友的朋友一定还是朋友。每对朋友关系用两个整数(Xi,Yi)组成,表示朋友的编号分别为Xi,Yi。男人的编号是正数,女人的编号是负数。小明的编号是1,小红的编号是-1.大家都知道,小明和小红是朋友,那么,请你写一个程序求出两公司之间,通过小明和小红认识的人最多一共能配成多少对情侣。(包括他们自己)输入格式第原创 2021-02-28 16:29:14 · 266 阅读 · 0 评论 -
洛谷P1629——邮递员送信(dijstra)
题目描述有一个邮递员要送东西,邮局在节点 11。他总共要送 n-1n−1 样东西,其目的地分别是节点 22 到节点 nn。由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有 mm 条道路。这个邮递员每次只能带一样东西,并且运送每件物品过后必须返回邮局。求送完这 n-1n−1 样东西并且最终回到邮局最少需要的时间。输入格式第一行包括两个整数,nn 和 mm,表示城市的节点数量和道路数量。第二行到第 (m+1)(m+1) 行,每行三个整数,u,v,wu,v,w,表示从 uu 到 vv 有一条通过原创 2021-01-20 13:23:39 · 217 阅读 · 0 评论 -
洛谷P2249(二分)
#include<bits/stdc++.h>using namespace std;int main() { long long n,m; int num; scanf("%lld%lld",&n,&m); int a[n+1]; for(int i=1;i<=n;i++) { scanf("%d",&a[i]);原创 2021-01-20 19:59:25 · 207 阅读 · 0 评论 -
洛谷第三场选拔赛.B 最大值和
题目链接思路先用vis数组标记每一个数所在的位置,再得到1一直加到n的和,看sum是否小于等于n-1,若是,则直接将a中最大的值(n)和(n-sum)交换位置,然后按次序输出a;若不是,则定义l=1,r=n,当sum>0时,看sum是否大于等于r-l,是则sum-=(r-l),并交换a中数r和l的位置,否则让r–,最后顺序输出a。#include<bits/stdc++.h>using namespace std;#define ll long longconst int m原创 2021-02-25 18:10:45 · 89 阅读 · 0 评论 -
洛谷第三场选拔赛C.等差数列
题目链接思路直接令公差为362880(即123456789),最后求得b。#include<bits/stdc++.h>using namespace std;#define ll long longconst int mod = 998244353; ll a[1010];int main(){ int n; scanf("%d",&n); for(int i = 1; i <= n; i++) { scanf("%lld",&a[i])原创 2021-02-25 18:36:17 · 101 阅读 · 0 评论 -
洛谷P1892.团伙
传送门题目描述给定 n个人,他们之间有两个种关系,朋友与敌对。可以肯定的是:与我的朋友是朋友的人是我的朋友与我敌对的人有敌对关系的人是我的朋友现在这 n个人进行组团,两个人在一个团队内当且仅当他们是朋友。求最多的团体数。输入格式第一行一个整数 n代表人数。第二行一个整数 m 代表每个人之间的关系。接下来 mm 行每行一个字符 opt 与两个整数 p,q如果 opt为 F 代表 p 与 q为朋友。如果 opt 为 E 代表 p与 q 为敌人。输出格式一行一个整数代表最多的团体数。原创 2021-02-27 23:35:31 · 236 阅读 · 0 评论 -
P1443 马的遍历
传送门题目描述有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步输入格式一行四个数据,棋盘的大小和马的坐标输出格式一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1)思路:bfs#include<bits/stdc++.h>using namespace std;#define ll long long const int mod = 1e9 + 7;int n,m;原创 2021-02-28 14:37:00 · 77 阅读 · 0 评论