自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (1)
  • 收藏
  • 关注

原创 B - Power Sequence(暴力)

有 n 个数,现在要求将这个数列变成一个等比数列的形式你可以将这 n 个数随意排列或者将任意一个数加一或者减一操作,每次此类操作都要花费 1,问最少花费是多少枚举公差 q由于 n >=3 所以 ceil()取 1e5使得 a[i] 不超过 1e9const int N=1e5+5; int n,m,t; int i,j,k; ll a[N]; int main(){ //IOS; while(~sd(n...

2020-08-31 23:17:44 1189 1

原创 暑假日记

昨晚的 CF 开始 15 分钟 A 了前两道,之后看 C ,想出了一个 O(n^2)的算法,然后一直在想怎么优化,一直没优化出来,还有 D 题 WA 在了第 7 个样例,我就说嘛,一道暴力的题怎么可能这么多人都没出呢……从今天开始我就要为开学考试复习了,上午看了一下线代,不管怎么说,数学先不能落下,下午补了一下题,有做了两道利用滚动数组的题目。...

2020-08-15 22:26:11 105

原创 C. Good Subarrays(思维)

如果有一段字符串数字之和为其长度,那么成这个字符串为 good给出一个字符串,问有多少字串满足一上来我就想出了一个 O(n^2) 的做法(不愧是我) ,然后不出意外 T 了超时代码:const int N=1e5+5; int n,m,t; int i,j,k; int a[N]; int sum[N]; int main(){ //IOS; rush(){ sd(n); fo...

2020-08-15 16:38:34 650

原创 D - Colored Rectangles(动态规划)

给出红绿蓝三种颜色的木棍,每种长度的木棍每一次给一对,现在每次取两对木棍,组成由两种颜色组成的长方形,求最后长方形的面积之和最大是多少这样思路就很简单了,每次都从三个数组中挑选出最大的和次大的,模拟即可但是你会发现,当有一种颜色的木棍数量很多时,假设 R >B+G最优的策略还会是这样吗?有可能存在 B G 两种颜色相互组成木棍,而我们希望让所有的 B G 都与 R 组成木棍这两种决策需要再次比较大小,这样问题的复杂性就比较高了WA代码:const in...

2020-08-15 16:21:45 351

原创 HDU 1208 Pascal‘s Travels

有一个 n*n 的方阵,从左上角 (1,1)出发到达 (n,n) 有多少种方式每个方格中有一个数 x,到达这个方格后,你可以选择向右或向下行走 x 各单位注意若 x = 0 那么会被卡住,不允许越界const int N=50+5; int n,m,t; int i,j,k; int a[N][N]; ll dp[N][N];int main(){ //IOS; while(~sd(n)){ if(n=...

2020-08-14 16:27:50 250

原创 HDU 2501 Tiling_easy version

递推方程为:dp[i]=dp[i-2]*2+dp[i-1]const int N=100+5; int n,m,t; int i,j,k; int a[N]; int dp[N];int main(){ //IOS; dp[1]=1; dp[2]=3; for(i=3;i<=N;i++){ dp[i]=dp[i-2]*2+dp[i-1]; } rush(){ sd...

2020-08-14 16:06:47 212

原创 HDU 2524 矩形A + B

高中数学:横行选择两条直线,竖行选这两条直线即*其中 n ,m 为水平线与竖直线const int N=100+5; int n,m,t; int i,j,k; int a[N]; int dp[N][N];int main(){ //IOS; rush(){ sdd(n,m); n++,m++; pd(n*(n-1)/2*m*(m-1)/2); } //...

2020-08-14 14:03:36 177

原创 HDU 2512 一卡通大冒险

假设 dp[i][j] 为有 i 张卡片分给 j 个人的种类数先来看一个例子当有 3 张卡片时时,{{A},{B},{C}} , {{A,B},{C}}, {{B,C},{A}}, {{A,C},{B}} ,{{A,B,C}}我们取分给 3 个人此时加一张卡片,也就是有 4 张卡篇分给 3 个人第 4 张卡片可以在{{A,B},{C}}, {{B,C},{A}}, {{A,C},{B}} 这三个集合中插入一个新元素也可以在 {{A},{B},{C}} 内与其他字母构成...

2020-08-14 11:29:20 190

原创 暑假日记

昨晚第一次开黑打比赛,哎,一言难尽啊,A 题一开始思路错误,WA 了几次后,心态炸裂,看 B ,跟着队友的翻译,理解错了,又 WA ,此时真的无心在比赛了,又看 C ,可以做,但是还在思考前两道,再加上网络延迟,我真的不想做了今天早上起来,从新开始做了一下这三道,除 C 之外,剩下的秒 A,那感觉真的无力吐槽了还是动态规划水题的一天,我感觉回去重温 DP 之后,又有了一个重新的认识可能昨晚睡得比较沉的缘故,今天的心态及状态也比前两天好了许多,心不再那么浮躁,不过今天有一辆车溅了我一身水,哎!.

2020-08-13 22:28:49 180

原创 HDU 2032 杨辉三角

const int N=100+5; int n,m,t; int i,j,k; int a[N]; int dp[N][N];int main(){ //IOS; dp[1][1]=1; dp[2][1]=dp[2][2]=1; for(i=3;i<=30;i++){ dp[i][1]=dp[i][i]=1; for(j=2;j<=i-1;j++){ dp[...

2020-08-13 22:18:53 182

原创 HDU 1087 Super Jumping! Jumping! Jumping!

最大上升子序列:有 n 个数,每次取的数都必须比前一个取的数大dp[i] 为以 i 结尾的最大上升子序列由 max(dp[j] )转移过来,因为 dp[j] 以 a[j] 结尾,所以只要判断 a[i]>a[j] 即可当然别忘了初始化const int N=1000+5; int n,m,t; int i,j,k; int a[N]; int dp[N];int main(){ //IOS; while(~sd(n)...

2020-08-13 16:25:01 285

原创 HDU 1466 计算直线的交点数

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;bool dp[22][222];void goto_dp(){ for(int i=0;i<22;i++) dp[i][0]=1; for(int i=2;i<22;i++)//枚举线的条数 for(in.

2020-08-13 16:02:00 297

原创 Codeforces Round #664 (Div. 2) C.Boboniu and Bit Operations(思维)

给出有 n 个元素的数组 a,和 m 个元素的数组 b求 c 数组,c[i]=a[i]& b[j] (j ∈ [1,m]),使得 c1| c2 | …… | cn 最小我们可以知道 a&b<=min(a,b) , a|b>=max(a,b)所以使得 c 数组尽量相同, 假设都是 ans那么证明a[i] &b[j] =ans 即可也就是说对于 a[i] 总存在一个数 b[j] 使得 a[i] & b[j] =ansco...

2020-08-13 10:46:54 338 2

原创 B. Boboniu Plays Chess(手速)

有一个车(象棋中的),他可以飞跃一条直线给出一个方格 n*m,以及起点 x,y走过的方格是不能再走的,每个方格都要走一遍,输出路径const int N=350+5; int n,m,t; int i,j,k; int a[N]; bool vis[N][N];//这个不要也可以 int main(){ IOS; int nx,ny; while(cin>>n>>m>&...

2020-08-13 09:38:39 541

原创 A. Boboniu Likes to Color Balls(思维)

有四中球,分别给出其数量,可以将其他三种颜色的球都拿出一个,然后这三个变为白球,注意每个颜色都要拿一种,问经过人一次操作后,是否可以将球变成回文要组成回文,如果每种球都有偶数中一定可以,一奇三偶,将唯一奇数放在中间也可以如果都有两种不可以如果三种都是奇数,那么唯一的偶数不是 0 的话,那么进行操作,变成三偶一奇注意,此时若白球为 0,也是可以的,因为白球索取后就是那一位奇数若都是奇数,就不存在有 0 的情况,所以进行一次操作变成四个偶数即可const int N=35...

2020-08-13 09:12:57 437

原创 POJ 3176 Cow Bowling

有一个金字塔,一颗球只能滚到他的下面左边的那一个或右边的那一个,问经过的最大数值总和是多少经典 DP:dp[i][j] 表示到达第 i 层的第 j 个数字后的最大总和dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+a[i][j]const int N=350+5; int n,m,t; int i,j,k; int a[N][N]; int dp[N][N]; int main(){ //IO...

2020-08-12 22:21:01 121

原创 暑假日记

今天本来是打算做一下树形 DP 的练习,但是虽然之前照着书码了一遍,虽然 DP 方程比较好想,但是感觉码起来还是有点勉强,有点难,又翻书,看了下状压 DP还是不行,这几天心情很急躁,学习很不在状态,之后感觉单调队列优化的 DP 可以试一下,确实感觉能冲,但是用单调队列的那一部分还好,但是阻碍我的好像是 DP 方程,根本找不到方程的下手点,最后我还是决定先放弃学习新的 DP 知识,在巩固一下线性 DP 的内容,emmmm,感觉自己的动态规划学的真的很差,一瓶子不满半瓶子晃荡……...

2020-08-12 21:34:03 103

原创 暑假日记

最近这几天事事特别多,看起来都是一些不慌不忙的小事,可是心里总是惦记着今天有练习了一下区间 DP感觉还是套路多一点有一个题还是挺有意思的有一个长度为 n 的数列,每次只能取走最左边的数或最右边的数,取走后将其乘以 i 加到答案上,i 为这是第几次取数问最后答案最大是多少这个题好像之前做过,挺有印象的状态方程也比较容易:dp[i][j]=max(dp[i+1][j]+a[i]*cnt,dp[i][j-1]+a[j]*cnt)借助区间 DP这个 dp 方程的意义比较特殊,只.

2020-08-11 22:22:43 93

原创 HDU 1300 Pearls(前缀和+DP)

#include<stdio.h>#define min(x,y) (x<y?x:y)int main(){ int dp[105],num[105],sum[105],pri[105],i,j,k,t,m,n; scanf("%d",&m); while(m!=0) { scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d%d",&am.

2020-08-11 22:07:31 219 1

原创 1574:矩阵取数游戏

首先先算出 n 行中每一行的最值,相加即可对于每一行来说,在区间 [i,j] 中,dp[i][j]=max(dp[i+1][j]+a[i]*2^i,dp[i][j-1]+a[j]*2^i)在开始之前,首先要处理一下,将谁放在最后一位提取,因为每一个数都可以是最后一个被提取的当然在实现过程中需要用到高精度,但我不会啊(逃)下面的代码只能过 6 个点const int N=100+5; int n,m,t; int i,j,k; ll a[N][N]...

2020-08-11 16:17:07 1215

原创 1573:分离与合体

const int N=300+5; int n,m,t; int i,j,k; int a[N]; int dp[N][N]; int ans[N][N];//储存区间 i~j 上的分界点void print(int l,int r,int step,int cnt){ if(l>=r) return ; int mid=ans[l][r]; if(cnt==step){ printf("%d ",mi...

2020-08-11 15:07:23 330

原创 暑假日记

今天和朋友出去吃了顿饭,互相抱怨了一下,也难怪我们看的太远了,大二将要开学,就觉得自己的未来就这样了,吐槽了一下高中那些破事。下午回来还是老老实实的看了下树形动态规划的

2020-08-10 22:40:44 129

原创 C. Obtain The String(二分+思维)

有两个字符串 s,t现在可以从 s 中拿出任意多个字符,他们可以不是连续的,但是顺序不能变问经过多少次操作后才能得到 tint main(){ IOS; rush(){ string s,t; cin>>s>>t; vector<int> v[30]; for(i=0;s[i];i++){ int k=s[i]-'a'; ...

2020-08-09 16:10:44 362 1

原创 POJ 3268 Silver Cow Party(SPFA)

有 n 个点 m 条单向边,起点为 x,问从每一个点 i 到 x 的距离 + 从 x 到 i 的距离最大是多少开始建一个有向图,再将有向图的起点与终点置换,两次以 x 为起点的 SPFA 即可const int M=1e5+5;const int N=1000+5; int n,m,t; int i,j,k; vector<Pair> E[M]; bool inq[N]; int d[N]; void init()...

2020-08-09 14:58:04 167

原创 POJ 2387 Til the Cows Come Home(带 vector 的 SPFA)

const int N=1000+5; int n,m,t; int i,j,k; vector<Pair> E[N]; bool inq[N]; int d[N]; void init(){ for(i=0;i<N;i++) { E[i].clear(); inq[i]=0; d[i]=inf; }}void SPFA(int s){ queue...

2020-08-08 22:10:44 183

原创 暑假日记

今天补了一下昨晚的 CF 。昨晚的比赛,题目难度没有那么大,但是感觉到了小马宝莉对我并不友好一上来先看的 C 题,想了近 20 分钟吧,有思路,可以做,打完了之后 ac 不了,忽然想到二分,又打了一遍,又 WA,然后回到 A 题,这时候比赛过去 30 分钟了吧,很慌A 题的没读明白,直接看着样例打的一晚上卡在 B 题上,B 题也不算难,但我没以为这个题会卡,没注意数据范围,直接暴力,然后 T,当时也不想 C 题了,一直优化,但是本质还是暴力,比赛还剩 15 分钟,熬不下去了,看了看 D 题,

2020-08-08 16:27:11 263

原创 D - Rarity and New Dress(二维 DP)

题目大概是从 n*m 的图中,找出菱形,菱形的形状由相同字母组成的题目中 涂绿 的形状首先想到的就是递推,以 ch[i][j]=‘a’ 为例:以 [i][j] 为中心向上向下走,直到遇到不为 ‘a’ 的字符在以 [i][j] 为中心向左向右走,直到遇到不为 'a' 的字符取最小值作为以 ch[i][j] 为中心的贡献值dp[i][j]=min(l[i][j],r[i][j],u[i][j],d[i][j])dp[i][j]:以 ch[i][j] 为中心的贡献值...

2020-08-08 16:12:21 363

原创 C - Pinkie Pie Eats Patty-cakes(二分+模拟)

const int N=2e5+5; int n,m,t; int i,j,k; int a[N]; int pos[N]; int maxx; bool C(int x)//间隔为 x{ int s=1; for(int i=1;i<=n;i++){//枚举题目中 ai 的范围 if(a[i]){ int tmp=a[i]; for(int j=s;j<=n...

2020-08-08 14:30:03 746

原创 B. Applejack and Storages(模拟)

有 n 条边,给出对应的长度,有 m 次询问,每次会 ‘+’:添加一根木棒,或 ‘-’:减少一根木棒,问是否可以组成一个正方形和一个长方形,这两个四边形不可以重合,减少时,保证一定拥有这种长度的木棒一开始以为是到水题,开始暴力,期间穿插了能想到的优化,但 T 到我怀疑人生后,发觉这个题不大对头,开始换思路超时代码:const int N=2e5+5; int n,m,t; int i,j,k; int a[N]; map<i...

2020-08-08 09:15:25 2050 1

原创 SPFA 算法总结

回顾一下使用邻接表的 SPFA 的算法如上图所示:假设原点是 1 ,也就是说 1 在队列中将与 1 节点连接的节点放入队列中此时更新 d[2]=3 , d[3]=9 , d[4]=7 , d[5]=3将以上节点放入队列中此时队列里有 2,3,4,5 节点然后 2 出队,发现与 2 连接的有 3 号节点,更新 d[3]=5, 但是 3 节点在队列中,所以不再进行操作之后 3 号节点出队,与 3 号节点连接的只有 4 号节点,但此时 d[4]=7<9+4,选择不跟新..

2020-08-07 22:20:50 5113 1

原创 HDU 2544 最短路(Dijkstra || SPFA)

Dijkstra:Spfa:const int N=2e5+5; int n,m,t; int i,j,k; int head[N],all=0;//id,edge_num int d[N]; //点 i 到起点的距离 bool vis[N];struct Edge{ int to,next; int w;}G[N];void add(int u,int v,int w){ G[all].w=w; ...

2020-08-07 21:28:38 383

原创 GYM 101147 E. Jumping(最短路径转化+spfa)

有 n 个点,每个点 i 都可以传送到 i+x,或 i-x 的位置(每个点必须满足在区间 [1,n] 上),求每个点 i 到达 n 的最小传送次数将 i -> i-x 转化为 起点为 i ,终点为 i-x,边权为 1 的路径,借助最短路径算法求解const int N=2e5+5; int n,m,t; int i,j,k; int head[N],all=0; int d[N]; //点 i 到起点的距离 bool vis[N]...

2020-08-07 16:06:14 216

原创 HDU 2066 一个人的旅行(spfa)

假设 0 为虚拟起点,SPFA 求解即可const int N=1e4+5; int n,m,t; int i,j,k; int head[N],all=0; int d[N]; //点 i 到起点的距离 int cnt[N]; //点 i 的入队次数 bool vis[N];struct node{ int to,next; int w;}G[N];void add(int u,int v,int w){ ...

2020-08-07 14:16:18 190

原创 POJ 3259 Wormholes(spfa 判断负环)

有 n 个点,m 条无向边,t 条有向边,判断图是否存在负环const int N=1e4+5; int n,m,t; int i,j,k; int head[N],all=0; int d[N]; //点 i 到起点的距离 int cnt[N]; //点 i 的入队次数 bool vis[N];struct node{ int to,next; int w;}G[N];void add(int u,int v,...

2020-08-07 11:29:12 213

原创 暑假日记

上午看了一下 spfa 算法的优化,在练习的时候发现 dij 还可以优化,打算明天学习一下。关于今天的 dijkstra 和 spfa 算法,dijkstra 算法和 Prim 算法相似,维护 d 数组,d[i] 一般表示从原点到达 i 位置的最短距离,当然可以根据题目要求变通,只要弄懂贪心过程这里还是比较好理解的如上图所示:假设原点是 1,维护 d 数组,d[i] 表示 1~i 节点的最小距离首先初始化 d[i]=inf; d[1]=0找出距原点最近的点,d[2]=3然后更新

2020-08-06 21:17:21 130

原创 HDU 2680 Choose the best route(dij)

有 n 个地点,有 m 个条路,以及终点 e给出 m 条路的起点和终点,以及路费再给出 q 个起始点,求到达 e 点最小花费默认起始点为 0 ,利用 dij 求解const int N=1000+5; int n,m,t; int i,j,k; int d[N]; int f[N][N]; bool vis[N];void Dijkstra(int s){ for(int i=0;i<=n;i++){ ...

2020-08-06 20:23:33 220

原创 POJ 2253 Frogger(dij)

有两只青蛙,分别在第 1,2,个位子上,其他的位子都是石头,现在青蛙 1 出发找 2,但是他的体力有限,所以要求你寻找一条路径,使得能够到达 2 号点的最短路径 并且 相邻的两块石头的最大距离尽可能的短const int N=200+5; int n,m,t; int i,j,k; double d[N];//源点到任一点 i 的最长距离 double f[N][N]; bool vis[N];int x[N],y[N];double dis(i...

2020-08-06 18:03:13 270

原创 HDU 1102 Constructing Roads(Prim)

分别给出 i->j 的价格,给出 m 条路已经建好,求最小连接费用const int N=100+5; int n,m,t; int i,j,k; int f[N][N]; int minn[N]; bool vis[N];void Prim(int s){ int ans=0; for(int i=1;i<=n;i++){ vis[i]=0; minn[i]=f[s][i]; ...

2020-08-05 23:47:28 215

原创 暑假日记

练习了 Kruskal 算法和 Prim 算法求解最小生成树,其实这一部分当时掌握的还是可以,明天开最短路径算法,应该和今天一样,复习一下 dijistra 和 spfa 算法。kruskal 算法利用并查集求解,并查集还比较熟悉,所以复习起来比较快,Prim 利用贪心,和 dijistra 算法一样都是利用蓝白点思想。就今天所学的而言,kruskal 算法的效率要比 Prim 效率高一些,Prim算法首先选择一个结点作为最小生成树的起点,然后找出最小生成树中各结点权值最小的边,再根据新加入的节点再

2020-08-05 22:03:07 129

原创 HDU 5624 KK‘s Reconstruction(Kruskal)

给出 n,m,再给出 m 条边,求 n 个点连起来时,(最大值 - 最小值)的最小值是多少const int N=2e5+5; int n,m,t; int i,j,k; int fa[N];struct node{ int u,v; int w; bool operator<(node b){ if(w!=b.w) return w<b.w; if(u!=b.u) return u<b...

2020-08-05 21:42:07 325

codeblocks17.12安装包.zip

适合新手使用的编译器,之后更新 百度网盘安装包: 链接:https://pan.baidu.com/s/1M1PGcirlC0He1WjOFrw8gQ 提取码:jfq5

2020-07-02

空空如也

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

TA关注的人

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