随笔分类 -  动态规划

摘要:P2015 二叉苹果树 题目描述 有一棵苹果树,如果树枝有分叉,一定是分二叉(就是说没有只有一个儿子的结点) 这棵树共有 \(N\) 个结点(叶子点或者树枝分叉点),编号为 \(1 \sim N\),树根编号一定是 \(1\)。 我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有 阅读全文
posted @ 2025-04-13 18:05 郭轩均 阅读(17) 评论(0) 推荐(0)
摘要:CF607B Zuma 题目描述 \(\texttt{Genos}\) 最近在他的手机上下载了祖玛游戏。在祖玛游戏里,存在 \(n\) 个一行的宝石,第 \(i\) 个宝石的颜色是 \(C_i\)。这个游戏的目标是尽快的消灭一行中所有的宝石。 在一秒钟,\(\texttt{Genos}\) 能很快的 阅读全文
posted @ 2025-02-25 20:03 郭轩均 阅读(31) 评论(0) 推荐(0)
摘要:P1063 [NOIP 2006 提高组] 能量项链 题目描述 在 Mars 星球上,每个 Mars 人都随身佩带着一串能量项链。在项链上有 \(N\) 颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因 阅读全文
posted @ 2025-02-25 19:25 郭轩均 阅读(45) 评论(0) 推荐(0)
摘要:P1880 [NOI1995] 石子合并 题目描述 在一个圆形操场的四周摆放 \(N\) 堆石子,现要将石子有次序地合并成一堆,规定每次只能选相邻的 \(2\) 堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。 试设计出一个算法,计算出将 \(N\) 堆石子合并成 \(1\) 堆的最小得 阅读全文
posted @ 2025-02-25 16:26 郭轩均 阅读(57) 评论(0) 推荐(0)
摘要:P1775 石子合并(弱化版) 题目描述 设有 \(N(N \le 300)\) 堆石子排成一排,其编号为 \(1,2,3,\cdots,N\)。每堆石子有一定的质量 \(m_i\ (m_i \le 1000)\)。现在要将这 \(N\) 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两 阅读全文
posted @ 2025-02-25 15:53 郭轩均 阅读(44) 评论(0) 推荐(0)
摘要:B4016 树的直径 题目描述 给定一棵 \(n\) 个结点的树,树没有边权。请求出树的直径是多少,即树上的最长路径长度是多少。 输入格式 第一行输入一个正整数 \(n\),表示结点个数。 第二行开始,往下一共 \(n-1\) 行,每一行两个正整数 \((u,v)\),表示一条边。 输出格式 输出一 阅读全文
posted @ 2025-02-21 17:00 郭轩均 阅读(40) 评论(0) 推荐(0)
摘要:我最开始将n减了1,应为边长有n-1条,但是这会导致计算时出现错误,因为其他地方会用到n #include<iostream> #include<vector> using namespace std; const int N=1e5+5; vector<int>v[N]; int f[N]; in 阅读全文
posted @ 2025-02-21 16:29 郭轩均 阅读(14) 评论(0) 推荐(0)
摘要:P1352 没有上司的舞会 题目描述 某大学有 \(n\) 个职员,编号为 \(1\ldots n\)。 他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。 现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数 \(r_i\),但是呢,如果某个职员的 阅读全文
posted @ 2025-02-21 15:31 郭轩均 阅读(14) 评论(0) 推荐(0)
摘要:这道题,没想到可以把启动机器时间对后面的影响分离出来,这样第i个物品处理完的时间就是处理前面i个物品的时间总和 #include<iostream> #define int long long using namespace std; const int N=1e6; int f[N]; int c 阅读全文
posted @ 2025-02-18 15:19 郭轩均 阅读(3) 评论(0) 推荐(0)
摘要:注意不要把q[h+1]写成q[h-1]; #include<iostream> using namespace std; #define int long long const int N=4*1e6+200; int f[N]; int s[N]; int c[N]; int q[N]; doub 阅读全文
posted @ 2025-02-18 14:33 郭轩均 阅读(14) 评论(0) 推荐(0)
摘要:斜率优化dp最重要的就是写正确关系式并且找对x,y,k,b; f[i]=f[j]+(i-(j+1)+sum[i]-sum[j+1-1]-l)^2 减的是j+1,因为求的是j+1到i; f[i]=f[j]+(s[i]+i-(s[j]+j)-(l+1))^2; 令pi=s[i]+i,pj=s[j]+j, 阅读全文
posted @ 2025-02-18 13:53 郭轩均 阅读(12) 评论(0) 推荐(0)
摘要:没看到这道题是多组测试数据输入 阅读全文
posted @ 2025-02-17 17:13 郭轩均 阅读(7) 评论(0) 推荐(0)
摘要:#include<iostream> #define int long long using namespace std; int ans=0; int num[1<<11]; int f[110][1<<10][1<<10]; int s[1<<12]; int g[1<<12]; signed 阅读全文
posted @ 2025-02-17 15:52 郭轩均 阅读(7) 评论(0) 推荐(0)
摘要:这道题对取最大值的地方有要求,要先取最大值再入队 阅读全文
posted @ 2025-02-16 13:20 郭轩均 阅读(6) 评论(0) 推荐(0)
摘要:这题最开始数据比较水,后来加强了,我没过hack数据,我的代码最主要的问题是有一些点会从前面无法经过的点更新,所以就需要初始化f为最小值 #include<iostream> #include<cstring> using namespace std; #define int long long c 阅读全文
posted @ 2025-02-15 20:44 郭轩均 阅读(21) 评论(0) 推荐(0)
摘要:崩溃了,debug半天发现是变量名重复了 #include<iostream> #include<cstring> #define int long long using namespace std; const int N=1e5; int q[N]; int f[N]; int w[N]; in 阅读全文
posted @ 2025-02-15 18:12 郭轩均 阅读(6) 评论(0) 推荐(0)
摘要:![](https://img2024.cnblogs.com/blog/3599636/202502/3599636-20250215165220271-949058549.png) ![](https://img2024.cnblogs.com/blog/3599636/202502/3599636-20250215165224696-1477296427.png) 阅读全文
posted @ 2025-02-15 16:52 郭轩均 阅读(5) 评论(0) 推荐(0)
摘要:位运算符好麻烦,没打括号被卡了半天 #include<iostream> #define int long long using namespace std; int f[12][100][1<<11]; int s[1<<11]; int num[1<<11]; signed main(){ in 阅读全文
posted @ 2025-02-15 15:36 郭轩均 阅读(4) 评论(0) 推荐(0)
摘要:由于我的cnt是从一开始的,我还debug了一会 由于数据是一行一行的输入,我们不能像蒙德里安的梦想那样,按列判断 if((s[a]&g[i])s[a]&&(!(s[a]&s[b])))f[i][a]=(f[i][a]+f[i-1][b])%p; 如果(s[a]&g[i])s[a]说明s[a]在g[ 阅读全文
posted @ 2025-02-15 14:40 郭轩均 阅读(17) 评论(0) 推荐(0)