08 2011 档案

摘要:1.定理:(带余除法)若有a,b两个整数,且b>0 ,则存在两个整数q,r 使得 a = b*q + r . (其中 0 <= r < b , 且q和r是唯一的)证明: 假设存在 q1和r1 也满足 a = b*q1 + r1 . 则把两式相减则有 b*(q-q1) + (r-r1) = 0; 化简得有b*(q-q1) = r1 - r . 因为q,q1是整数,所以 q-q1 也为整数 又因为 0 <= r1 < b , -b < -r <= 0 , 则 -b < r1-r < b. 得到的 -1 < (q-q1) < 1 ,所 阅读全文

posted @ 2011-08-11 19:10 continue_n 阅读(245) 评论(0) 推荐(0) |

摘要:二维背包问题:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有 一个可付出的最大值(背包容量)。问怎样选择物品可以得到最大的价值。设这两种代价分别为代价1和代价2,第i件物品所需的两种代价分别为a[i]和 b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为w[i]。状态方程为 f[i][v][u]=max(f[i-1][v][u],f[i-1][v-a[i]][u-b[i]]+w[i])#include <stdio.h>#include <string.h>int Max(int a,int b){ ret 阅读全文

posted @ 2011-08-10 16:14 continue_n 阅读(230) 评论(0) 推荐(0) |

摘要:#include <stdio.h>typedef struct NODE { int lc,rc; int grade; int first,mid,tail;}node;node s[600005];int gra[200005];int Max(int a,int b){return a>b?a:b;}void Maketree(int first,int tail,int at){ s[at].first = first; s[at].tail = tail; if( first == tail ) s[at].grade = gra[first]; else{ s[ 阅读全文

posted @ 2011-08-10 07:57 continue_n 阅读(127) 评论(0) 推荐(0) |

摘要:HDU 1710 知道前序和中序求后序原来的做法是开了一个数组存放由前序和中序求出来的树,但是空间浪费很大,一直RE后来又想想,递归的时候就可以直接输出来了,不用开数组自己写出来的AC代码,感觉还不错,先收藏起来#include <stdio.h>int qs[1005],zs[1005];int n;int fun1(int left,int k,int right){for( ; left <= right ; left++){if( qs[k] == zs[left] ) break;}return left;}void fun2(int g,int left,int 阅读全文

posted @ 2011-08-02 20:07 continue_n 阅读(437) 评论(0) 推荐(0) |

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3