摘要:
根据题目所给的3个不符合情况的条件,一个个判断图是否符合这3个条件即可1.不能出现内部环,拓扑排序判断2.不能有超过1个点的入度为0,因为只有一个树根3.每个点最多一个入度这里要注意的一点是这个点的数字是乱给的,所以最大值为8,但实际上不一定有8个点,这里记录一个最大值的参数,和一个总共点数的参数来... 阅读全文
摘要:
这里一看就是找箱子到终点的最短路一开始还傻傻的以为人的位置给的很没有意思- -,然后果然错了没过多久想明白了错误,因为你推箱子并不是你想去哪里推就能去哪推的,首先得考虑人能否过的去,因为可能人被箱子或墙挡住都是可能的虽然想明白了,但还是写了好久改了好久~~代码能力还是太渣了利用dfs判定人能否走到所... 阅读全文
摘要:
题目大意:从三维空间的(0,0,0)出发到(a-1,b-1,c-1),每移动一个都要时间加一,计算最短时间根据六个方向,开个bfs,像spfa那样计算最短路径就行了,但是要1200多ms,也不知道有没有更好的方法 1 #include 2 #include 3 #include 4 #incl... 阅读全文
摘要:
题目大意:我们需要将一串数字分成多个确定个数的连续段,在得到所有段的和的最大值定义一个dp[i][j]数组表示在前j个数中取满 i 个段所能得到的最大值那么也就是说明在这道题目当中每一段都是必须要被取到的能够取到的前提是 j >= cnt[i] //表示前 i 段的数字个数总和sum[i] 表示前 ... 阅读全文
摘要:
用bellman_ford的方法,将中间不断取较小值,修改为取较大值就可以了 1 #include 2 #include 3 #include 4 using namespace std; 5 const int N = 105; 6 int dp[N] , k , first[N] , va... 阅读全文
摘要:
题目大意是在魔方上找到有多少对小立方块它们之间连接的点不超过两个因为任意两个立方块之间相连的点就只有0,1,2,4 这样4种情况那么我们只需要考虑总共的组成立方块对数sum = C(2 , n*n*n) = (n*n*n*(n*n*n-1))/2 在n*n*n个立方块中任选两个组合然后减去邻接4个点... 阅读全文
摘要:
题目大意:根据学校的申请费用,根据已有的钱得到最大的offer率这里很明显就是一个价值为概率的背包问题计算两个offer合并的概率 为a + b - a*b 1 #include 2 #include 3 #include 4 using namespace std; 5 const int ... 阅读全文
摘要:
题目大意:在0~10这11个点上面接饼 , 每秒最多往左或往移动一格,或者保持原地不动令dp[i][j]表示在第 i 秒在 第 j 个点上最多能得到的饼的数量dp[i][j] = max(dp[i-1][j] , dp[i-1][j-1] , dp[i-1][j+1]) + a[i][j] //a[... 阅读全文
摘要:
1 #include 2 #include 3 4 using namespace std; 5 const int N = 1005; 6 #define max(a,b) a>b?a:b 7 8 char a[N] , b[N]; 9 int dp[N][N];10 11 int ma... 阅读全文
摘要:
题目大意:给定一堆点,具有x,y两个值找到一组最多的序列,保证点由前到后,x严格上升,y严格下降,并把最大的数目和这一组根据点的编号输出来这里用两种方法来求解:1.我们可以一开始就将数组根据x由大到小排个序,由前往后取,保证x严格上升了只要每次取得过程中找一条x不相等的关于y的最长下降子序列即可,加... 阅读全文