
Oiers
D042412
博客:https://stardustdl.github.io/ProblemSolving/
展开
-
Tyvj专题 P1337 fibonacci数列
P1337题目 注意到n较大,所以不能用递推式求解,要用矩阵乘和快速幂优化。 矩阵乘注意几点:取模,求和。快速幂一定要背过。矩阵乘不一定写的太规范,适用于题目就好,这样也更快。#include<iostream>using namespace std;const int MOD=32768;int mr[2][2]={{1,1},{1,0}},mt[2][2],ans[2]={1,1},a原创 2015-02-18 12:46:26 · 548 阅读 · 0 评论 -
POJ 1390 Blocks
题意有一些带颜色的盒子,如果一些相邻的盒子都是相同的颜色,和两个盒子左(如果它存在的话)和其右(如果它存在的话)的其他颜色,我们称之为“盒段”。 每一次,可以单击一个盒子,然后整个段消失。如果这段由k个盒子组成,你会得到k * k点。求最优点数 分析区间DP,一目了然,但是状态并不太好理解: opt[i][j][k]表示[i..j]然后把第j段和其后的k个格子合并的最优解原创 2015-07-16 12:25:00 · 411 阅读 · 0 评论 -
POJ 1293 Duty Free Shop
题意两种物品,放到n个盒子,要求所有盒子放满,且每个盒子只有一种物品,物品可以有剩余分析将盒子视为物品,第一种物品为背包大小,进行DP并且记录路径,回溯可得放第一种物品的最优方案(目的是为了是放第二种物品的盒子总容积尽可能小),最后在判断一下就行了。 代码#include<iostream>using namespace std;int M,L,c[1010],dp[1010],n,pre[10原创 2015-07-16 19:40:56 · 754 阅读 · 0 评论 -
POJ 1742 Coins
题意求多重背包能组成多少种面值分析f[i]表示i能否组成,每次填f[j]时直接由f[j-weight[i]]推出,前提是num[j-weight[i]]代码#include<cstdio>#include<algorithm>#include<cstring>const int MAXN=100000;int cnt[MAXN+3],v[105],c[105];bool opt[MAXN+原创 2015-07-17 21:34:25 · 545 阅读 · 0 评论 -
POJ 1636 Prison rearrangement
题意M个罪犯,分在两个监狱中,现在尽量交换他们的所在的监狱,但有几对人不能在同一个监狱中,问最大交换多少对人分析注意对于给的一些对,实际上可能组成森林,这样交换就变成了两拨人的交换,这样其实变成了一个二维背包问题具体实现可以染色,也可以像下面的代码一样拆点,记录每个联通块中的两拨人数 注意比较此题与二分图最大独立集的区别,和 Team them up的区别 代码#include<ios原创 2015-07-17 21:32:57 · 784 阅读 · 0 评论 -
取模运算
运算性质(A+B) mod C = (A mod C + B mod C) mod C (A-B) mod C = (A mod C - B mod C) mod C (A * B) mod C = (A mod C) * (B mod C) mod C对于负数的处理(A-B) mod C=(A%C-B%C+C)%C 加C,使答案在0..C-1内乘法取模若C较大,则容易乘的结果超出long原创 2015-07-17 18:56:29 · 1302 阅读 · 0 评论 -
动态规划专题学习之一-概述分析
概述动态规划用来解决一些最优化问题,它通过充分利用问题的最优子结构与重复子问题性质来快速求解,应用广泛,思想深刻,也常搭配其他算法与数据结构,灵活度高,思维难度较大(我认为)。三要素状态表示当前的信息转移状态之间的转化决策是否进行转移的判断,选择最优的转移思想基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求原创 2015-07-17 21:50:29 · 530 阅读 · 0 评论 -
POJ 1853 Cat
题意把一堆浮点数分成两部分,要使得两部分的差值尽量小,小于总大小的2%分析由于有2%的限制,将浮点数转成百分比,再同时扩大10000倍,就转成背包问题:判定分成两部分,其中有一部分大小=i的方案是否存在 最后枚举i,另一部分一定约等于i,这样找到min{sumw-2*i|opt[i]}的i,注意DP时记录方案 输出时沿着方案走即可 注意:此题用bitse原创 2015-07-17 21:36:24 · 941 阅读 · 0 评论 -
线性筛法及扩展
以下代码中的定义: mindiv[i]:i的最小质因子 phi[i]:欧拉函数i的值 mindivq[i]:i的最小质因子的个数 d[i]:i的约数个数 sumd[i]:i的约数和 miu[i]:莫比乌斯函数i的值 inv[i]:i在mod n意义下的乘法逆元标准筛法欧拉筛法,可以保证每个数只被自己最小的质因子筛去,时间复杂度O(n) 两种等价实现 易于理解版:void solve原创 2015-07-17 20:44:03 · 2350 阅读 · 4 评论 -
BZOJ2806-[Ctsc2012]Cheat
题意给定一个由m 个01 串组成的字典,根据这个字典和一个阙值L,可以断言一个01 串是否“熟悉,其定义是:把一个串划分成若干段,如果某个段的长度不小于L,且是字典中的某个串的连续子串,则这个段可识别。如果对于给出的串,存在一个划分,使得可识别的长度不小于总长度的90%, 则称这个串是“熟悉”的。先后给出n 个01 串,对于每个给出的串,求使得该串“熟悉”的最大L 值,如果不存在这样的L,输出0。输原创 2016-05-16 22:16:54 · 510 阅读 · 0 评论 -
BZOJ3926-[Zjoi20150]诸神眷顾的幻想乡
题意幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日。粉丝们非常热情,自发组织表演了一系列节目给幽香看。幽香当然也非常高兴啦。这时幽香发现了一件非常有趣的事情,太阳花田有n块空地。在过去,幽香为了方便,在这n块空地之间修建了n-1条边将它们连通起来。也就是说,这n块空地形成了一个树的结构。有n个粉丝们来到了太阳花田上。为了原创 2016-05-16 22:17:47 · 775 阅读 · 0 评论 -
POJ 1015 Jury Compromise
题意从n个人中选出m个,每个人有固定的p值,d值,要求使m个人的p总和和d总和的差的绝对值最小,若有多解则取两者和最大的。分析f[i][j]表示在选m个人中的第i个人的时候使所有已选中的人的p,d差为j时,所能获得的p,d最大和。 f[i + 1][j + p[k] - d[k]] = f[i][j] + p[k] + d[k];(要求k之前没有选过,要查看f[i][j]的完整路径,确保无k)原创 2015-07-16 12:22:04 · 500 阅读 · 0 评论 -
POJ 1276 Cash Machine
题意有各种不同面值的货币,每种面值的货币有不同的数量,请找出利用这些货币可以凑成的最接近且小于等于给定的数字cash的金额。 分析多重背包,但由于只是是否存在的问题,所以可以用类似完全背包的方法,但这个的正确性暂时不会证明 代码#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int原创 2015-07-16 19:37:04 · 431 阅读 · 0 评论 -
Tyvj专题 P1003 越野跑
P1003题目 按题意计算即可。 每跑一段,要加上跑过和返回的时间,满足总时间小于要求时间即可。#include<iostream>using namespace std;int t,m,u,f,d,ans=0,tm;char c;int main(){ cin>>m>>t>>u>>f>>d; for(int i=1;i<=t;i++){ cin>>c;原创 2015-02-18 12:18:04 · 647 阅读 · 0 评论 -
Tyvj专题 P1159 玛丽卡
P1159题目 题意不太好理解,但理解之后思路就很清晰了:先找最短路,存储这条路上的边,然后每次删除一条边,做最短路,求出这些最短路中的最大值。 数据很坑,首先要自己计算出边数,然后注意INF的取值。并且由于这是无向图,每次要修改两条边的状态,利用异或可以很方便的做到这点。#include<iostream>#include<vector>#include<queue>#include<a原创 2015-02-18 12:37:33 · 465 阅读 · 0 评论 -
Tyvj专题 P1005 采药
P1005题目 很明显可以转化为零一背包问题,时间为体积。#include<iostream>using namespace std;int at[101],vt[101],f[1000],t,m;int main(){ cin>>t>>m; for(int i=1;i<=m;i++)cin>>at[i]>>vt[i]; for(int i=1;i<=m;i++)原创 2015-02-18 12:25:12 · 583 阅读 · 0 评论 -
Tyvj专题 数字三角形
数字三角形1 数字三角形2 数字三角形3 数字三角形4 四道题都是数字三角形:第一题就是经典DP;第二题由于需要取模,采用DFS更容易些,并且居然没超时;第三、四题本质相同,必过一个点,可以双向做,交与此点,但更好的方法将这个点的值变大,使得最优解必经这个点,然后普通DP,答案中减去所加数,注意这个极大值要整个数字三角形的数值总和(其实可以稍小一点)。第二题#include<iost原创 2015-02-18 12:34:50 · 710 阅读 · 0 评论 -
Tyvj专题 P1083 分糖果
题目 简单BFS,ans=最远点+m#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#include<vector> #include<queue>using namespace std;const int MAXN=100000,INF=0x3f3f3f3f;vector<int> g[M原创 2015-07-14 15:51:13 · 649 阅读 · 0 评论 -
Tyvj专题 P1094 矩形分割
题目因为要分成1*1的格子,所以每一条边肯定都要切,只不过是切的次数的多少有所不同。 对于每一条纵边来说,它所需要切得次数等于在这条纵向边切之前的已经切的横边的次数。对于横边就看纵边。让代价大的先切,这样的话满足代价大的切得次数少。把横边和纵边排个序,然后不断的维护ans即可。#include<iostream>#include<algorithm>#include<cstring>#inc原创 2015-07-14 15:54:28 · 592 阅读 · 0 评论 -
Tyvj专题 P1004 滑雪
P1004题目 遍历每个点,进行DFS,注意要记忆化。#include<iostream>#include<algorithm>using namespace std;int m[101][101],r,c,tans=0,ans=0,f[101][101];void dfs(int x,int y,int step){ if(x>r||x<1||y>c||y<1)return;原创 2015-02-18 12:22:04 · 636 阅读 · 0 评论 -
POJ 动态规划专题
未归类1015 Jury Compromise 1432 Decoding Morse Sequences 1661 Help Jimmy背包DP1276 Cash Machine 1293 Duty Free Shop 1636 Prison rearrangement 1742 Coins 1853 Cat二维DP1018 Communication System 1112 Tea原创 2015-07-16 12:34:31 · 493 阅读 · 0 评论 -
POJ 1661 Help Jimmy
题意中文题面,不解释分析dp[i][0]表示从上数第i层左边到达地面的最小时间,dp[i][1]为从右边的最小时间 先找到下落到的板,然后直接计算即可,记忆化搜索易编 代码#include<iostream>#include<algorithm>#include<cmath>#include<cstring>using namespace std;const int MAXN原创 2015-07-16 19:24:27 · 415 阅读 · 0 评论 -
POJ 1432 Decoding Morse Sequences
题意给出一个字母的译码表,给出一个有n个单词的字典,给出一串编码。问再给出字典中有多少种不同的解码方式。分析首先编码只有-和.,可以很方便地建立一棵Trie树,还是最熟悉的二叉方式。 然后令opt[i]表示区间[i..len]的方案数 则有opt[i]=sigma{[i..j]组成的单词的个数*opt[j+1]|i<=j代码#include<iostream>#in原创 2015-07-16 19:21:53 · 743 阅读 · 0 评论 -
OJ 题目生成器
项目地址:https://github.com/StardustDL/generator-oj-problem此工具可以规范题目格式,辅助生成题目数据,本地判题检验题目数据,并渲染 Markdown 题目描述,生成可以导入到 OJ 的题目包。目前支持的 OJ:HustOJ(可生成支持直接导入的题目包)generator-oj-problemA CLI tool to generate...原创 2019-03-15 11:12:19 · 2604 阅读 · 2 评论