洛谷
qq_52051345
博客转移至www.acming.net和51codefly.com
展开
-
P1880 [NOI1995]石子合并
题目P1880 [NOI1995]石子合并分析区间DP经典问题。f[i][j]表示 i 到 j 堆石子,它是由 F[i][k] 和 F[k+1][j] 合成的,则状态转移方程为:F[i][j]=max(F[i][k]+[k+1][j]+sum[j]-sum[i-1],F[i][j])。然后我们枚举合并 len,计算出下标 j = i + len - 1。AC代码#include &l...原创 2019-11-21 19:06:13 · 83 阅读 · 0 评论 -
P1280 尼克的任务
题目P1280 尼克的任务分析动态转移方程:AC代码#include <cstdio>#include <iostream>#include <algorithm>using namespace std;struct Node{ int s, t;}node[10005];int dp[10005], start[100005];...原创 2019-11-21 17:56:52 · 110 阅读 · 0 评论 -
P1091 合唱队形
题目P1091 合唱队形分析这题是一道动态规划题目,根据题目要求,作者道题目思路是这样的:先求第 i 个同学左边最长上升序列长度,再求第 i 个人右边最长下降序列的长度,时间复杂度为O(n^2)。AC代码#include <iostream>#include <cstdio>using namespace std;int a[105], Left[105],...原创 2019-11-21 16:53:24 · 72 阅读 · 0 评论 -
P1020 导弹拦截
题目P1020 导弹拦截分析对于第一问,题目说拦截的每一个导弹高度都必须比上一个低,然后求拦截的最多的导弹,这显然是求最长不上升子序列。而对于第二问,是求一个最长上升子序列。最后输出两个序列的长度即可。AC代码#include <iostream>#include <cstdio>#include <algorithm>using namespa...原创 2019-11-21 15:55:32 · 82 阅读 · 0 评论 -
P1616 疯狂的采药
题目P1616 疯狂的采药分析多重背包问题。(注意与01背包问题的不同)AC代码#include <iostream>#include <cstdio>using namespace std;int w[10005], v[10005], dp[100005];int main(){ int t, m; scanf("%d%d", &t, &...原创 2019-11-21 09:15:44 · 89 阅读 · 0 评论 -
P1049 装箱问题
题目P1049 装箱问题分析要使得箱子剩余容量最低,也就是求最大的可装重量,使用动态规划即可。AC代码#include <iostream>#include <cstdio>using namespace std;int w[35], dp[20005];int main(){ int n, v; scanf("%d%d", &v, &...原创 2019-11-21 08:58:37 · 81 阅读 · 0 评论 -
P1048 采药
题目P1048 采药分析简单dp问题AC代码#include <iostream>#include <cstdio>using namespace std;int w[105], v[105], dp[1005];int main(){ int t, m; scanf("%d%d", &t, &m); for (int i = 1;...原创 2019-11-21 08:55:56 · 112 阅读 · 0 评论 -
P1064 金明的预算方案
题目P1064 金明的预算方案分析f[i]表示i的钱内能得到的最大价值g[j]表示在选了某个主件下,j的钱内得到的最大价值则状态转移方程为:g[i]=max(g[i],g[i-a[j].price]+a[j].value) (其中j为i的附件),f[i]=max(f[i],g[i])AC代码#include <iostream>#include <cstdio...原创 2019-11-21 08:18:52 · 75 阅读 · 0 评论 -
P1164 小A点菜
题目P1164 小A点菜分析状态转移方程:f[i][j]=f[i-1][j]+1(j = w[i])f[i][j]=f[i-1][j]+f[i-1][j-w[i]];(j > w[i])=f[i][j]=f[i-1][j];(j < w[i])说白了,其实就是在吃与不吃之间做出一个选择,在钱够得情况下, 办法总数总是等于吃这道菜的办法数与不吃这道菜的办法数之和。AC代码...原创 2019-11-20 19:14:54 · 98 阅读 · 0 评论 -
P1060 开心的金明
题目P1060 开心的金明分析简单01背包问题。但要注意一个问题,就是在使用dp[i + 1][j] = dp[i][j]时,w[i]与v[i]时,下标应该从0开始,而使用dp[i][j] = dp[i-1][j]时w[i]与v[i]应该从1开始,这样可以防止越界。代码①#include <iostream>#include <cstdio>using nam...原创 2019-11-20 15:38:49 · 63 阅读 · 0 评论 -
P1137 旅行计划
题目P1137 旅行计划分析每个点的答案是它所有前驱节点的答案加1,即f[i]=max(f[i],f[j]+1)AC代码#include <cstdio>#include <cstring>#include <queue>#include <iostream>using namespace std;int n, m, cnt;...原创 2019-11-14 21:57:17 · 100 阅读 · 0 评论 -
P4017 最大食物链计数
题目P4017 最大食物链计数分析思路:拓扑排序。当一个点的入度变为零,所有它能吃的东西都已经搜索过了,这时它的数值就不会发生变化,就可以入队了,这样也保证了队列里的所有数值都不会发生变化。AC代码#include <cstdio>#include <cstring>#include <queue>#include <iostream>...原创 2019-11-14 21:35:24 · 138 阅读 · 0 评论 -
P1807 最长路_NOI导刊2010提高(07)
题目P1807 最长路_NOI导刊2010提高(07)分析利用bfs不断更新当前结点的最长路。AC代码#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;queue<int> q;int ...原创 2019-11-14 20:47:05 · 107 阅读 · 0 评论 -
P2115 [USACO14MAR]破坏Sabotage
题目P2115 [USACO14MAR]破坏Sabotage分析AC代码#include <iostream>#include <cstdio>using namespace std;int n, sum[100005];double sufMax[100005], preMin[100005], c[100005];bool check(double ...原创 2019-11-01 10:09:06 · 101 阅读 · 0 评论 -
P2916 [USACO08NOV]安慰奶牛Cheering up the Cow
题目P2916 [USACO08NOV]安慰奶牛Cheering up the Cow分析这题开始不是很懂它的意思,看了题解才懂的。举个例子:有一条边 a->b 那么假定我们从a点出发再回到a点,先从a点出发,加上a点权值和边权,再从b回到a 加上b点权值和边权,那么对于每一条边,他的边权是不是就等于边权 * 2 + 起点的边权 + 终点的边权呢?即 edge[i].w = t[edg...原创 2019-10-31 16:51:21 · 107 阅读 · 0 评论 -
P2504 [HAOI2006]聪明的猴子
题目P2504 [HAOI2006]聪明的猴子分析kruskal算法模板AC代码#include <iostream>#include <cstdio>#include <cmath> #include <algorithm>using namespace std;int temp[5005], x[5005], y[5005],...原创 2019-10-31 16:43:59 · 243 阅读 · 0 评论 -
P2330 [SCOI2005]繁忙的都市
题目P2330 [SCOI2005]繁忙的都市分析prim算法模板,当然也可以用Kruskal算法做AC代码#include <iostream>using namespace std;int n, m, ans, cnt;int dis[10005], vis[10005], head[10005];struct Edge{ int to; int w; in...原创 2019-10-31 16:42:10 · 96 阅读 · 0 评论 -
P1536 村村通
题目P1536 村村通分析并查集模板题,合并之后扫描 f 数组判断总共几个集合。AC代码#include <iostream>#include <cstdio>#include <cstring>using namespace std;int f[1005];int n, m;int getf(int x){ if (f[x] == x...原创 2019-10-31 16:38:33 · 157 阅读 · 0 评论 -
CF20C Dijkstra?
题目CF20C Dijkstra?分析long long数据 + SPFA最短路模板 + 打印路径AC代码#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <vector>const int MAXN = 200...原创 2019-10-26 14:37:22 · 128 阅读 · 0 评论 -
P2935 [USACO09JAN]最好的地方Best Spot
题目P2935 [USACO09JAN]最好的地方Best Spot分析Dijkstra模板题AC代码#include <iostream>using namespace std;int n, m, p;int a[505], f[505][505];int main(){ scanf("%d%d%d", &n, &m, &p); fo...原创 2019-10-25 18:59:58 · 179 阅读 · 0 评论 -
P2951 [USACO09OPEN]捉迷藏Hide and Seek
题目P2951 [USACO09OPEN]捉迷藏Hide and SeekDijkstra代码(TLE)直接使用前向星Dijkstra最短路模板会超时#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 1000...原创 2019-10-25 17:41:18 · 197 阅读 · 0 评论 -
P3371 【模板】单源最短路径(弱化版)
题目P3371 【模板】单源最短路径(弱化版)分析Dijkstra模板题,只不过这里用了链式前向星AC代码#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#define MAXN 1000000using namespace std;s...原创 2019-10-25 14:39:44 · 105 阅读 · 0 评论 -
P2910 [USACO08OPEN]寻宝之路Clear And Present Danger
题目P2910 [USACO08OPEN]寻宝之路Clear And Present Danger分析Floyd 最短路径模板题AC代码#include <iostream>#include <vector>using namespace std;vector<int> v;int f[105][105];int n, m;int main...原创 2019-10-23 09:03:36 · 145 阅读 · 0 评论 -
P1330 封锁阳光大学
题目P1330 封锁阳光大学分析依题意,对于一个连通图任意相邻两点不能有两只螃蟹,那么我们很容易想到用染色法来做这道题。一个点要么有螃蟹,要么没有螃蟹,即可用黑白代替,题目就转化为任意一个连通图两点都不能有相同的颜色。① 对于颜色标记,我们可以用一个变量 t,初始为 0,下次一次标记颜色为 t = t ^ 1 。② 那么递归结束条件是什么呢 ?第一、如果当前节点已染颜色与当前想要染的颜色...原创 2019-10-23 08:36:28 · 90 阅读 · 0 评论 -
P1196 [NOI2002]银河英雄传说
题目P1196 [NOI2002]银河英雄传说分析对于M指令,一次移动整列,并且是把两列合并成一列。对于C指令:判断飞船 i 和飞船 j 是否在同一列,若在,则输出它们中间隔了多少艘飞船。由于需要判断是否在同一列,每列初始都只有一艘飞船,之后需要不断合并,所以很容易就想到要用并查集来实现。AC代码#include <iostream>#include <cmath...原创 2019-10-22 22:50:05 · 81 阅读 · 0 评论 -
P2024 [NOI2001]食物链
题目P2024 [NOI2001]食物链分析对于动物 a 和 b,我们可能有 a 吃 b,a 与 b 同类,a 被 b 吃。即存在三种关系:a 是 b 的同类、猎物、天敌,那我们要给数组分配三倍的空间来维护这层关系。依题意:① 第一种说法是“1 x y”,表示 x 和 y 是同类。假如不是同类,那么 x 与 y 是天敌或者猎物关系,即 getf(a + n) == getf(b) ||...原创 2019-10-22 22:36:10 · 109 阅读 · 0 评论 -
P1197 [JSOI2008]星球大战
题目P1197 [JSOI2008]星球大战分析看完题目,第一眼就是想到,我们反过来不断把新的边加入,然后利用数组存储答案,最后逆序输出。① num 数组用来给破坏的星球编号(从大到小),为什么要编号呢?因为后面 sort 排序是根据这个编号来的。② 预处理时,我们以两个星球中 x, y 最大值作为该边的编号。AC代码#include <algorithm>#inclu...原创 2019-10-21 21:25:31 · 114 阅读 · 0 评论 -
洛谷CF6ATriangle
https://www.luogu.org/problemnew/show/CF6A#include <iostream>#include <cstdlib>using namespace std;int a[5];int vis[5];int t[5];//暂存所选数 int flag;void dfs(int step){ if (step == 4...原创 2019-04-07 21:50:59 · 217 阅读 · 0 评论 -
洛谷CF445ADZY Loves Chessboard
一个棋盘上有一些格子是坏的,另一些是正常的。对于每一个正常的格子,都要在上面放上棋子。 请找到一组解使没有两个相同颜色的棋子相邻(两个格子相邻为它们存在共同的边)输入格式: 第一行为两个数n,m。(1<=n,m<=100) 下面n行,每个格子上的字符为’-‘或’.’,’-‘表示坏掉的格子,’.'表示正常的格子。输出格式: 输出n行,每行m个字符。第i个字符串的第j个字符应为“W”,...原创 2019-04-08 14:58:57 · 128 阅读 · 0 评论 -
洛谷P1596 [USACO10OCT]湖计数Lake Counting
由于近期的降雨,雨水汇集在农民约翰的田地不同的地方。我们用一个NxM(1<=N<=100;1<=M<=100)网格图表示。每个网格中有水(‘W’) 或是旱地(’.’)。一个网格与其周围的八个网格相连,而一组相连的网格视为一个水坑。约翰想弄清楚他的田地已经形成了多少水坑。给出约翰田地的示意图,确定当中有多少水坑。输入格式:第1行:两个空格隔开的整数:N 和 M 第2行到第...原创 2019-04-08 16:59:08 · 752 阅读 · 0 评论 -
P1451 求细胞数量
一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。(1<=m,n<=100输入:整数m,n(m行,n列)矩阵输出:细胞的个数#include <iostream>/*测试数据 输入: 4 105234500067123456050021456006710000000...原创 2019-04-08 21:35:31 · 93 阅读 · 0 评论 -
P2802 回家
题目描述小H在一个划分成了n*m个方格的长方形封锁线上。 每次他能向上下左右四个方向移动一格(当然小H不可以静止不动), 但不能离开封锁线,否则就被打死了。 刚开始时他有满血6点,每移动一格他要消耗1点血量。一旦小H的 血量降到 0, 他将死去。 他可以沿路通过拾取鼠标(什么鬼。。。)来补满血量。只要他走到有鼠标的格子,他不需要任何时间即可拾取。格子上的鼠标可以瞬间补满,所以每次经过这个格子都有...原创 2019-04-08 22:18:18 · 201 阅读 · 0 评论 -
P1433 吃奶酪
题目描述房间里放着n块奶酪。一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处。输入输出格式输入格式:第一行一个数n (n<=15)接下来每行2个实数,表示第i块奶酪的坐标。两点之间的距离公式=sqrt((x1-x2)(x1-x2)+(y1-y2)(y1-y2))输出格式:一个数,表示要跑的最少距离,保留2位小数。原题链接:https://www.lu...原创 2019-04-09 22:52:34 · 102 阅读 · 0 评论 -
洛谷P1426 小鱼会有危险吗
题目链接:https://www.luogu.org/problemnew/show/P1426#include <iostream>#include <cmath>using namespace std;int main(){ float s, x; cin >> s >> x; //计算到达前需要几秒,最后一段路程不满一秒,先取整...原创 2019-07-08 22:17:57 · 347 阅读 · 0 评论 -
洛谷P1551
题目传送门分析简单并查集,套模板。AC代码#include <iostream>using namespace std;int n, m, p;int f[5005];void init(){ for (int i = 1; i <= n; i++) { f[i] = i; }}int getf(int x){ if (f[x] == x)...原创 2019-10-10 20:00:37 · 154 阅读 · 0 评论 -
洛谷P1111
题目传送门分析这题其实也是个并查集模板题。我们可以这样想,在路全都被地震破坏后,每一个村庄都是一个集合,一旦连通了一条,那么两个村庄便重新组成一个集合,这时集合数减一,直到集合数为一(即所有村庄都连起来了)输出此时的时间。所以在连接两个村庄之前我们先要通过时间对它们排序。AC代码#include <iostream>#include <algorithm>usi...原创 2019-10-10 20:34:05 · 130 阅读 · 0 评论 -
洛谷P1087
题目传送门分析题意实际上是在递归树,建树的方法实际上就是树的先序遍历,当目前节点长度大于1时递归建立子树。AC代码#include <iostream>#include <string>using namespace std;void FBI_tree(string s){ int len = s.length(); if (len >= 2)...原创 2019-10-10 21:15:12 · 138 阅读 · 0 评论 -
P1123 取数游戏
题目描述一个N×M的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻8个格子中的一个即认为这两个数字相邻),求取出数字和最大是多少。输入输出格式输入格式:第1行有一个正整数T,表示了有T组数据。对于每一组数据,第一行有两个正整数N和M,表示了数字矩阵为N行M列。接下来N行,每行M个非负整数,描述了这个数字矩阵。输出格式:...原创 2019-04-11 11:16:32 · 519 阅读 · 0 评论