摘要:
#if , #else , #elif , #endif 指令#if 表达式// 语句段1#elif 表达式2// 语句段2#else// 语句段3#endif#ifdef , #ifndef#ifdef// 语句段#endif#error 指令使编译器显示一条错误信息,然后停止编译。 阅读全文
摘要:
01背包 有N件物品,容量为V的背包。第 i 件物品的费用是c[i] ,价值是w[i] 。求能放入背包的物品的最大价值。 每件物品可以选择放或不放,定义f[i][v]表示前 i 件物品恰放入一个容量为 v 的背包可以获得的最大价值。 f[ i ][ v ] = max{f[ i-1 ][ v ] , f[ i-1 ][ v-c[i] ]+w[i]} 时间和空间复杂度都是 O(VN)。 优化空间复杂度 肯定有一个主循环 i=1...N,每次算出来二维数组f[i][0...V]的所有值。 令f[v] = f[i][v] f[i][v] 是由 f[i-1][v] 和f[i-1][... 阅读全文
摘要:
第一次独立做矩阵,只WA了一次,好高兴~~ 题意:已知 F(n)=3 * F(n-1)+2 * F(n-2)+7 * F(n-3),n>=3,其中F(0)=1,F(1)=3,F(2)=5,对于给定的每个n,输出F(0)+ F(1)+ …… + F(n) mod 2009。 S(n) = F(0)+F(1)+...+F(n), S(n) = S(n-1)+F(n); S(n) = S(n-1)+3*F(n-1)+2*F(n-2)+7*F(n-3). 由上面的式子可以得出矩阵 |1,0,0,0|n-2 ... 阅读全文
摘要:
着实被批评了一下,自己的数论确实太烂了。 题意:一条路上,有n个炸弹,给出每个炸弹的位置,一次走一步的概率是p,走两步的概率是1-p。求安全走完的概率。 定义dp[i] = dp[i-1]*p + dp[i-2]*(1-p) 由于路很长,不能递推。 n个炸弹就把路分成了n+1段路,计算走完一段路安全的概率就行,然后相乘。 | p , 1 | | dp[i-1],dp[i-2] | * | 1-p,0 | = | dp[i],dp[i-1] | 求安全走完一段长为L路的概率,就将矩阵乘L次即可,由于L可能很大,用二分法计算。#include#includ... 阅读全文
摘要:
n元集合Ω到它自身的一个一一映射,称为Ω上的一个置换或n元置换。 Ω上的置换σ可表示为 或简记为, 其中i1,i2,...,in是1,2,...,n的一个排列,αik是αk在置换σ下的像。有时也把α 在σ下的像记为ασ。 阅读全文
摘要:
在无向图中, 若从顶点v1到顶点v2有路径, 则称顶点v1与v2是连通的。如果图中任意一对顶点都是连通的,则称此图是连通图。 强连通和弱连通的概念只在有向图中存在。 强连通图:在有向图中, 若对于每一对顶点v1和v2, 都存在一条从v1到v2和从v2到v1的路径,则称此图是强连通图。 弱连通图:将有向图的所有的有向边替换为无向边,所得到的图称为原图的基图。如果一个有向图的基图是连通图,则有向图是弱连通图。 强连通分量学习:http://blog.csdn.net/justlovetao/article/details/6673602 缩点:http://hi.baidu.co... 阅读全文
摘要:
题意就不说了,刚开始做我竟然傻傻地去模拟,智商捉急啊~~超时是肯定的 求出 a ,b 的最小公倍数,因为n够长的话,就会出现循环,所以就不要再做不必要的计算了。如果最小公倍数大于n的话,就直接计算n吧。 除了可以应用循环来节省计算,还可以成段计算来节省。#include#include#define i64 __int64i64 abs(i64 x){ if(x(b-i%b)?(b-i%b):(a-i%a); if(tmp+i>len) tmp=len-i; ans+=abs(i%a-i%b)*tmp; i+=tmp... 阅读全文
摘要:
题意:给出笛卡尔坐标系上 n 个点,n不大于100,求出这些点中能围出的最小面积。 可以肯定的是三个点围成的面积是最小的,然后就暴力枚举,计算任意三点围成的面积。刚开始是求出三边的长,然后求面积,运算步骤多,超时鸟~~,后来看了别人的代码,计算步骤挺少啊,不过我不会推这个式子。#include#include#includestruct node{ double x,y;};node point[105];const double inf = 99999999;double Deal(node a,node b,node c){ return ((b.x - a.x) * ... 阅读全文
摘要:
一道简单的搜索题目,建一个树,根节点是 0 ,连接的两个节点的距离是 1 ,求 到 根节点长度是2的节点的个数。 #include#includestruct node{ int next,to; int step;};node edge[100010];int tot;int head[100010];int N,D,ans;void Add(int x,int y){ edge[tot].to=y; edge[tot].next=head[x]; head[x]=tot++;}void DFS(int x,int step){ if(head[x]=... 阅读全文
摘要:
题意:有n台电脑,然后给出电脑两两相连的链接速度,把这些电脑分成 两组,组内链接时间为0,求两组的最大链接速度。 一台电脑分两种情况进行DFS,属于第一组或属于第二组。#include#includeint n;int C[25][25];int f[25];int ans;void DFS(int a,int sum){ if(a==n) { if(sum>ans) ans=sum; return ; } int temp = 0; for(int i=0;i<a;i++) if(f[i]==2) ... 阅读全文