摘要: 用f(n)表示n个人满足条件的结果,那么如果最后一个人是m的话,那么前n-1个满足条件即可,就是f(n-1); 如果最后一个是f那么这个还无法推出结果,那么往前再考虑一位:那么后三位可能是:mmf, fmf, mff, fff,其中fff和fmf不满足题意所以我们不考虑,但是如果是 mmf的话那么前 阅读全文
posted @ 2024-08-20 21:23 XiaohuangTX 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 排序一下就ok了 #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; char s[30]; struct node { int x; int y; }a[105]; int cmp(node a 阅读全文
posted @ 2024-07-19 00:35 XiaohuangTX 阅读(3) 评论(0) 推荐(0) 编辑
摘要: /* 题意:给n 求满足i*j+i+j=n(0<i<=j)方案数 思路:xy+x+y=n (x+1)(y+1)=x*y+x+y+1=n+1; 即求n+1的因子对数 参考:https://blog.csdn.net/Puppettt/article/details/83030925?ops_reque 阅读全文
posted @ 2024-07-14 21:54 XiaohuangTX 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 看了一眼题目,简单dp问题,但超时了一晚上,试了各种方法无法解决,最终放弃java,改用C直接过,我哭了。。。。 #include<stdio.h> #include<string.h> #define maxn 200010 int dp[maxn],ans[maxn],map[maxn]; in 阅读全文
posted @ 2024-06-19 23:45 XiaohuangTX 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 状态转移方程 if (j==2*i+1) { dp[j][i] = dp[j-2][i-1]+ (val[j]-val[j-1])*(val[j]-val[j-1]); }else { dp[j][i] = Math.min(dp[j-1][i], dp[j-2][i-1]+ (val[j]-val 阅读全文
posted @ 2024-06-15 21:46 XiaohuangTX 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 给定一个序列,询问是否能删除一个数让它成为非递减或者非递增的序列。 nlogn一直过不了,所以选择了以下方式。。。 因为删除一个嘛,先证明删除一个能不能是非递减的(非递增的把序列倒过来搞一次就行了) 首先,对一个序列前后两个数做差 比如说序列 3 1 4 1 5 做差后(即1-3,4-1,1-4,5 阅读全文
posted @ 2024-06-09 11:36 XiaohuangTX 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 求最长子序列的和。 dp[i] = max(dp[i] , dp[j] + xx[i])。 import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] 阅读全文
posted @ 2024-06-08 17:15 XiaohuangTX 阅读(2) 评论(0) 推荐(0) 编辑
摘要: Dilworth定理通俗地讲就是对于一个偏序集,最少链划分等于最长反链长度。 通俗点就是一个数列最少的不上升(<=)子序列的条数等于该数列最长上升(>)子序列的长度 就是求最长有序子序列 package bag; import java.util.Arrays; import java.util.S 阅读全文
posted @ 2024-06-07 22:48 XiaohuangTX 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 给你n个方块,其中每个方块具有它的长宽高(方块可以任意旋转放置),方块数量不限。现在你要堆一个高塔,上面方块的长和宽必须严格小于下面方块的长和宽。问你能堆起来的最大高度。先将方块以长和宽按从小到大排序,然后从小到大以此为底,求出最大高度。dp[i] = max(dp[j])+i.height (j. 阅读全文
posted @ 2024-05-27 14:11 XiaohuangTX 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 1:dp+二分 NlogN的复杂度 2:注意 road 与roads区别 3:注意输入不能用Scanner 4:注意格式 最后是要输出两个空行 假设存在一个序列d[1..9] = 2 1 5 3 6 4 8 9 7,可以看出来它的LIS长度为5。下面一步一步试着找出它。我们定义一个序列B,然后令 i 阅读全文
posted @ 2024-05-19 21:58 XiaohuangTX 阅读(2) 评论(0) 推荐(0) 编辑