- 博客(14)
- 收藏
- 关注
原创 HDU 4562 守护雅典娜(动态规划)
答案分为三种只能只有包含雅典娜的塔,只有包含怪兽的塔,包含雅典娜和怪兽的塔的和。使用dp可以分别计算包含雅典娜、怪兽的最厚塔层数,过程类似LIS。枚举这两种情况的塔数,求和计算第三种情况。#include #include #include #include #include #include #include #include using namespace st
2015-11-26 20:41:00 379
原创 使用SecureCRT远程登录Linux Ubuntu
在使用SecureCRT远程登录Ubuntu时会出现,The remote system refused the connection.这是因为SSH服务没有启动。安装SSH-Server。sudo apt-get install openssh-server启动SSH-Server。/etc/init.d/ssh startSSH-Server
2015-11-25 13:21:38 465
原创 HDU 4939 Stupid Tower Defense(贪心+动态规划)
可以发现对于最优解红塔一定是放在最后的。对于蓝塔和绿塔进行dp,dp[i][j]表示在长度为n的路径上已经安放i个绿塔和j个蓝塔可造成的最大伤害,然后进行转移。最优解一定是路径上放满了塔,这样n-i-j得到的就是红塔的数量,这样比较得到最大值即可。#include #include #include #include #include #include #include #inc
2015-11-08 19:00:20 286
原创 HDU 1561 The more, The Better(树形DP)
经典的树形DP。先将多叉树变成二叉树,然后进行DP。dp[i][j]表示以i为根,可选j个时候的最优解。#include #include #include #include #include using namespace std;const int maxn=205;int ch[maxn][2];int f[maxn][maxn];int v[maxn];in
2015-11-08 15:44:40 266
原创 HDU 3534 Tree(dfs统计树的直径的数量)
求树的直径用dfs可做,每次返回以当前结点为终点、某个叶子为起点的最长路径长度,同时找最大的两条路径求和更新最优解。具体分有多条同样长的最长路径、有一条最长路径和一条或多条次长路径、只有一条路径、叶子结点这几种情况。O(n)可做。#include #include #include #include #include using namespace std;const int
2015-11-08 14:39:24 593
原创 USACO Section 3.1 Humble Numbers
用一个数组p来维护每个素数要拓展的丑数在数组中的位置,每次比较得到最小的数字加入到丑数数组中。#include#include#include#include#include#includeusing namespace std;typedef long long LL;/*ID: kkkwjx1PROG: humbleLANG: C++*/int s[10
2015-11-06 19:33:32 233
原创 USACO Section 3.1 Score Inflation(完全背包)
完全背包。模版题,可以用滚动数组优化。#include#include#include#include#include#includeusing namespace std;typedef long long LL;/*ID: kkkwjx1PROG: inflateLANG: C++*/const int maxn=10005;int dp[maxn];int
2015-11-06 14:16:15 280
原创 USACO Section 3.1 Agri-Net(最小生成树Prime算法)
最小生成树,模版题。#include#include#include#include#include#includeusing namespace std;typedef long long LL;/*ID: kkkwjx1PROG: agrinetLANG: C++*/const int maxn=105;int g[maxn][maxn];bool use[m
2015-11-06 14:06:43 388
原创 HDU 1712 ACboy needs your help(分组背包)
模版题,分组背包。dp[i][j]=max(dp[i][j],cost[i][k]+dp[i-1][j-k])#include#include#include#include#include#includeusing namespace std;typedef long long LL;const int maxn=105;int cost[maxn][maxn];
2015-11-05 17:48:24 244
原创 HDU 5525 Product(数论)
首先将1-n每个数分解质因数,变成p1^x1*p2^x2...pi^xi..pm^xm的形式,其中pi表示质因数,ai表示质因数出现次数。考虑每个质因数pi对最后答案的贡献,由约数个数定理知除pi以外的质因数有(x1+1)*(x2+1)*...(xi-1+1)*(xi+1+1)..(xm+1)个,而pi可能贡献0到xi个,所以包括pi的约数的积是pi^0*pi^1*...pi^xi*(x1+1)*
2015-11-05 13:41:31 413
原创 USACO Section 2.4 Fractions to Decimals
首先答案不可能是无限不循环小数,因为无限不循环小数不能用分数表示。之所以出现循环是因为余数出现了重复,只需要用数组记录余数出现的位置,用判重来结束循环即可。#include #include #include #include #include #include #include #include #include using namespace std;/*ID:
2015-11-03 21:29:39 289
原创 USACO Section 2.4 Cow Tours (Floyd+并查集)
用floyd计算每个点可达的最短距离,然后统计每个点可达距离的最大长度。然后用并查集计算每个点所属的集合,枚举两个不同集合a、b里的两个点i、j,从所有的max{edge[a],edge[b],distance(i,j)+l(i)+l(j)},其中edge[x]表示集合x的直径,distance(x,y)表示x和y点的距离,l(x)表示点x可达距离的最大长度。#include #incl
2015-11-03 20:59:36 315
原创 HDU 5524 Subtrees(DFS)
分析可以发现所有子树的种数不会太大可以直接暴力统计。递归处理当前的树,首先记录当前树的大小,然后对于它的两颗子树,找到其中那颗满二叉树暴力统计子树种数,然后递归处理另一颗子树。注意统计判重。找满二叉树的过程可以通过枚举树的高度,然后判断另一颗树的高度与它相差是否在1之内。#include #include #include #include #include #include
2015-11-01 10:27:45 644
原创 HDU 5523 Game
简单题。如果不止1个柱子而且s和t相同则无解。其他情况下如果s和t分别在两边则是0,如果s在一头或s在中间但是s和t相邻则只需要1,其他情况下为2。#include #include #include #include #include #include #include using namespace std;typedef long long LL;int main(
2015-11-01 10:23:27 558
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人