- 博客(20)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
原创 HDU3591 01 背包 + 完全背包 + 多重背包 混用
0)01 背包,完全背包, 多重背包,混用。解题关键有两个。一个是将小倩付钱和老板找零分别做一个背包,小倩多重背包,老板无限背包,这样做可以的原因是,两个背包面值相同时对应的状态总可以作为一个不变的桥梁。另一个是,处理小倩的多重背包时,采用二进制优化可以显著缩短时间,不然因为数据过多容易超时(哪怕代码有错算不出正确数据,只要超时了,就会返回超时)。二进制优化的思想,就是利用任何数都
2016-04-27 20:03:35 497
原创 POJ2704 DP + 记忆化搜索 + 注意中间存储数据用long long不然WA
1)注意中间存储的数可能超出int范围,所以开long long ,否则越界以后,给一个随机数,就会WA。虽然方格最大是34×34,每次选择向下或者向右,那么路径数最多可能为2^(34+34-1)-X2^(34+43+1) 可以这么理解,把正方形从左上角起点开始拆成二叉树的形式来看,诸如1 2 3 42 3 4 53 4 5 64 5 6 71、2 、3 、4
2016-04-23 20:58:50 355
原创 DP背包小结(2)(结构完整,内容简洁,状态方程篇)
0 背包小结2,以下状态转移代码,假设所有相关变量及数组都已初始化,物品对应体积和价值都从下标为1的数组开始存储,dp[]或者dp[][]是各个状态下的背包内所装物品1 01背包(背包总容纳bag,有type种物品,每种物品只有一个选择放还是不放,给出对应体积vlume[i]、对应价值value[i])1)二维数组(建议充分理解,而不用之做题)(因为容易忘记将因体积原因放不进去
2016-04-22 21:35:33 578
原创 HDU2159 DP + 裸 + 二维费用(每个物品对应两种费用) + 完全背包
1#include #include #include using namespace std;const int maxn=1100;long long int dp[maxn][maxn];int exr[maxn];int ren[maxn];int main(){ int n,m,k,s; while(cin>>n){ memset(d
2016-04-22 21:28:54 373
原创 HDU2191 DP + 裸 + 多重背包
1)都是一维数组,但是状态转移方程的for循环稍有不同。都是利用倒序时 每一种物品都只放一个的特性,前者是该类物品放k次每次都放一个,后者是该类物品放一次 一次从1到k 放入个数依次增大#include #include const int maxn=110;int dp[maxn];int money[maxn];int weight[maxn];int number[m
2016-04-22 21:00:41 749
原创 HDU4508 DP + 裸 + 完全背包
1)#include #include #include using namespace std;const int maxn=110000;long long int dp[maxn];int a[maxn];int b[maxn];int main(){ int m; while(cin>>m){ if(m100){
2016-04-22 20:43:23 684
原创 HDU2602 DP + 裸 + 01背包
1)#include #include using namespace std;const int maxn=1010;int value[maxn];int volume[maxn];long long int dp[maxn];int main(){ int kase; cin>>kase; while(kase--){ memse
2016-04-22 20:41:52 363
原创 如何对拍数据
1对拍程序(注意对拍程序中的文件名,要与两个被测程序和数据生成器的名字相同,而且要与这三个程序源码中的名字相同,如在数据生成器main开头写上freopen("temp.in","w",stdout);ac测程序main开头写上 freopen("temp.in","r",stdin); freopen("tempac.in","w",stdout);被检测程序main开头
2016-04-22 18:59:55 2479 2
原创 HDU2084 DP + 水 /入门+ 递推 + 从后往前思考问题的方式
1)#include #include #include using namespace std;const int maxn=110;vector shuta[maxn];int main(){ int C; cin>>C; while(C--){ int n; cin>>n; int a; for(int i=1;i<=n;i++){ int
2016-04-18 20:26:06 476
原创 Vector清空数据与释放内存(.clear与.swap的区别与使用)
0)简单介绍在vector的数据结构中,.clear();清空数据.size();当前vector容器内存储的元素的个数.capacity();当前vector容器重新分配内存之前所能容纳的元素数量.swap();函数交换1)问题在用vector做题时,输入完一组数据处理完后,及时clear(),然后输入下一组数据,但是如果在输入之前,输出之前vecto
2016-04-18 20:22:13 56743 7
原创 UVA11280 最短路 + SPFA变形 + 单向链表存储边 + 结构体构造函数 + 鲁棒性
1)这道题有很多需要学习的地方,除了code技巧上的运用比如链表存储边、初始化、结构体构造函数,在思维上也有很多比如判断走哪个点除了花费以外还加了对停留次数的判断、而停留次数可能大于城市个数(对于查询数据做一个鲁棒性的判断)等等。值得经常#include #include #include #include #include using namespace std;const
2016-04-18 12:11:05 536
原创 HDU1301 最小生成树 + Prim +(Prim求最小生成树与Dijkstra求最短路的区别) (如此题不要误解题意为用Dijkstra!)
Prim 最小生成树 与 dijstra 最短路 很像,但是却不同。前者追求的是,将所有点走一遍,总路径最短,算法是不断更新确定的集合之中的点到集合之外的其他的点的最短距离,全部更新完以后,将这些把所有点连接起来的最短距离加起来就是所求。后者追求的是,从起点经过其他所有点,到达终点的路径最短,算法是不断更新从起点到确定的集合之外的其他点的最短距离,全部更新完以后,到终点的最短距离就是起点
2016-04-17 22:02:21 632
原创 POJ3615 超多次输入输出数据 Scanf比cin速度快很多(最短路 Floyd)
0)这是个裸的Floyd,但是因为用了cin而不是scanf,一晚都在超时!scanf的读取速度比cin快,对于有些输入次数很多的题,用cin会超时(cout与printf速度差别不大),比如下面这个题,1)是用scanf,时间400ms左右,2)是部分用scanf,部分用cin,时间是800ms左右,3)如果再把剩下的任何一个scanf改成cin,就会超时1)#include
2016-04-17 21:48:49 1120
原创 HDU2544 最短路 + 裸 + dijkstra + 邻接矩阵
1)//hdu 2544,裸dijkstra#include #include using namespace std;const int maxn=120;const int INF=999999;int lukou[maxn][maxn];int visted[maxn];//区别该点是否进入确定的集合之中int d[maxn];//目前从起点出发,到第i点的最短距离i
2016-04-17 18:23:01 432
原创 HDU2544 最短路 + 裸 + Bellman-ford + 链表存储
1)//hdu 2544,裸Bellman-ford#include #include using namespace std;const int maxn=120;const int INF=0x3f3f3f3f;//这是10^9,近乎无穷大的意思int d[maxn];//目前从起点出发,到第i点的最短距离//用边的结构数组存储,则只存题目中给的边即可,需要更新时只将这些记录
2016-04-17 18:21:06 377
原创 HDU2544 最短路 + 裸 + Floyd + 邻接矩阵
1)//hdu2544 裸floyd#include #include #define INF 0x3f3f3f3fusing namespace std;int d[105][105];//i点到j点的花费void floyd(int n){ for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=
2016-04-17 18:19:22 364
原创 HDU2544 最短路 + 裸 + 队列的SPFA + 链表存储
1)//hdu 2544 裸队列的SPFA+链表存储(或者用邻接矩阵二维数组,或第二唯不定长的vector邻接表)#include #include #include using namespace std;const int maxn=120;const int maxm=10010;const int INF=999999;//如果在算法中没有先判断是不是<inf,就直接
2016-04-17 18:17:01 516
原创 HDU1317 变形SPFA 求最大路 判断正环 点权替代边权 最短路求法灵活应用
1)因为不理解在这个题的环境下如何正确处理正环的问题,做了一下午,其中核心的两句代码已经在code中标出,并在code下面举出极端数据的例子。// 变形 spfa 求最大路,判断正环,点权替代边权,链表存储边#include #include #include #include #include #include using namespace std;const int m
2016-04-17 18:03:27 982
原创 HDU1850博弈论_NIM游戏——POJ2975
1)每个堆的扑克数量异或后得到的数res,如果为0则为必败态,如果为1则为必胜态。本题求先手的人如果想赢第一步有几种选择,就是为有几种选择可以让当前必胜态转为必败态然后使对方保持必败态。(陷阱是先手的人首先必须处在必胜态,见下面代码中注释第一行)怎样转为必败态,使res[i]^a[i]关于详细推理,参考博弈论小结,#include using namespace std;
2016-04-07 20:27:51 506
原创 Linux下重新更改root密码-获取root权限
在linux下,有很多时候必须要下转为root用户,但是在terminal中输入密码时却告诉你认证失败,这是我们在单用户模式下可以这样重新设置root密码:终端中输入sudo passwd然后输入该用户帐号的密码之后,便可以重新设置新的root密码。
2016-04-01 16:43:20 940
acm水题 二叉树模拟 hdu5444,能想到的测试数据都测了还是WA,求大神
2016-03-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人