
51nod
取竹
Hai capito?
展开
-
51Nod 1355 斐波那契的最小公倍数
zyz的题解:https://www.zhihu.com/question/61218881#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define N 1000003 #define p 1000000007 #define LL long long using原创 2017-09-27 21:24:08 · 266 阅读 · 0 评论 -
51Nod 1241 特殊的排序
因为可以把一个数向最前面移或者是最后面移,即把不符合排序的那些数拿走,所以求的就是n-最长递增序列的长度。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 5e4 + 5; int a[N],pre[N]; int main() { int n;原创 2017-09-11 20:53:29 · 255 阅读 · 0 评论 -
51Nod 1125 交换机器的最小代价
把所有的点分成一个个的置换的循环,对于每一个循环用循环中的最小的数进行置换,但这可能不是最优的。要考虑用循环外的最小数与环内最小数交换后再进行操作,把这两种都跑一遍,取最小值。#include<iostream> #include<algorithm> #include<cstdio> using namespace std; struct jq{ long long num; lo原创 2017-09-11 21:13:51 · 229 阅读 · 0 评论 -
51Nod 1052 最大M子段和
先将同符号的每一段存下来,并记录前后段标号,将正数段总和记录为tot 开一个最小堆存每一段的abs值。 每次从堆中取出一个x 去掉这一段,并将左右的段与之合并再存入堆中,作为撤销或更改操作。 每次操作都会减少一段,直到段数=k就退出。#include<cstdio> #include<cstdlib> #include<cmath> #include<algorithm> #d原创 2017-09-11 21:27:32 · 259 阅读 · 0 评论 -
51nod 1020 逆序排列
1020 逆序排列离线处理,二维dp[i][j]dp[i][j]表示前i个有k个逆序对的数量。f(n,k)=f(n,k−1)+f(n−1,k)−f(n−1,k−n)f(n,k)=f(n,k-1)+f(n-1,k)-f(n-1,k-n)用滚动数组储存#include <algorithm> #include <cstring> #include <cstdio> using namespac原创 2017-12-05 20:49:22 · 245 阅读 · 0 评论 -
51nod 1350 斐波那契表示
1350 斐波那契表示斐波那契数列定义为 f[0]=f[1]=1, f[i]=f[i-1]+f[i-2] (i>=2) 从f[i]开始的连续f[i-1]项 的最短表示F[t] 是有规律的。 其前f[i-2]项和 从f[i-1]开始的连续f[i-2]项相等,其后f[i-3]项为 从f[i-2]开始的连续> f[i-3]项 每项+1比如,当i=6时,13开始的连续8项,即F[13],F[14],原创 2017-12-05 21:00:44 · 235 阅读 · 0 评论