自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

马德里小铁匠的铁匠铺

悔恨会磨平你灵魂中的棱角。

  • 博客(43)
  • 资源 (4)
  • 收藏
  • 关注

原创 lightoj 1193 DP

做差法,有问题,没A#include #include #include #include using namespace std;#define MOD 100000007long long dp[2][16000];long long N, K, S;long long sum[2][16000];int main(){ long long T, Case

2014-02-27 16:16:15 600

原创 poj 2138 DFS

首先预处理,哪些字符串是可以互相到达的还有一点要注意的是,如果一个都找不出来,就输出原单词AC代码如下:#include #include #include #include using namespace std;struct Edge{ int to, next;};char s[1100][100];int N;Edge edge[400000];

2014-02-26 16:36:06 795

原创 poj 1964 DP

优化了的 O(n^3)的算法注意输入AC代码如下:#include #include #include #include using namespace std;char maps[1100][1100];int N, M;int l[1100], r[1100];int sum[1100][1100];int main(){ int T; cin

2014-02-26 15:14:37 579

原创 poj 1920 汉诺塔 贪心

看的别人的思路:首先我们从最初的状态移到现在的状态,这样倒过来想。然后我们肯定不会去移动最大的那一个,因为要移动最大的一个步数是把其他所有的移一遍的总和加1,然后就依次判断哪些是不在它应该在的地方,然后加上相应的步数。其实是有点贪心的意思,倒过来的每一步都取最小值AC代码如下:#include #include #include #include using names

2014-02-26 14:13:02 1102

原创 poj 1850 数位DP

注意非递增的情况AC代码如下:#include #include #include #include using namespace std;int dp[11][30];char s[20];int length;int DFS( int pos, int pre, bool statu ){ if( pos >= length ){ retu

2014-02-26 10:50:56 745

原创 poj 1837 DP

dp【i】【j】表示加入第i个物品之后和力矩为j的个数由于数组下标不能为负数,所以全部加上7500(15*25*20)AC代码如下:#include #include #include #include using namespace std;int dp[21][16000];int pos[21], weight[21];int C, G;int main(){

2014-02-26 10:04:56 559

原创 poj 1737 递推

n个点时,有2^C(n,2)种图,然后要减去不连通的图的个数sub点1和另外k-1个点相连,剩下n-k个点随意 ,这种情况的个数为 f【k】 * C( n - 1, k - 1 ) * 2^C( n - k, 2 )sub = sum(  f【k】 * C( n - 1, k - 1 ) * 2^C( n - k, 2 ) )    1 AC代码如下:#include#inclu

2014-02-26 09:41:00 714

原创 poj 1952 DP

AC代码如下:#include #include #include #include using namespace std;int dp[5100], cnt[5100];int num[5100];int main(){ int N, maxlength; while( scanf( "%d", &N ) != EOF ){ for( in

2014-02-26 09:20:28 620

原创 poj 1695 DP

AC代码如下:/* dp[i][j][k] 表示最前面一个在i,其他两个在j k是的最少时间 i>=j>=k 然后向前更新即可 1A 0MS 好爽!*/#include #include #include #include using namespace std;#define MAX 0x3f3f3f3fint dp[31][31][31];

2014-02-25 13:15:31 579

原创 hdu 1394 线段树

求出最初的的逆序数之后,有公式直接求其他的。。。。很容易推,自己推。。。。AC代码如下:#include #include #include #include using namespace std;#define MAX 5000int sum[4*MAX];void PushUp( int rt ){ sum[rt] = sum[rt*2] + sum[rt*2+

2014-02-24 20:27:12 798

原创 hdu 1166 线段树

AC代码如下:#include #include #include #include using namespace std;#define MAX 50000int sum[4*MAX];void PushUp( int rt ){ sum[rt] = sum[rt*2] + sum[rt*2+1];}void built( int l, int r, in

2014-02-24 18:47:07 692

原创 hdu 1754 线段树

AC代码如下:#include #include #include #include using namespace std;#define MAX 220000int Max[4*MAX];//注意这里int leftchild( int parent ){ return parent * 2;}int rightchild( int parent ){

2014-02-24 18:26:36 744

原创 poj 1655 树形DP

AC代码如下:#include #include #include #include using namespace std;#define MAX 0x3f3f3f3fstruct Edge{ int to, next;};int maxsonsize[22000], size[22000];int head[22000], tot;Edge edge[44

2014-02-23 14:33:51 687

原创 poj 1192 树形dp

好久没刷过树形dp了,都快忘记了dp【n】【0】表示不含有节点n时的最大权值和dp【n】【1】表示含有节点n时的最大权值和AC代码如下:#include #include #include #include #include using namespace std;#define MAX 0x3f3f3f3fstruct Edge{ int to, n

2014-02-23 10:38:37 758

转载 把一路的故事,说给夏天的月

1.初中第一次月考,我是全班倒数第五名。老师把卷子甩到我脸上,一个耳光跟上来。“走关系的废物。”——————————————————中考前一天晚上。我跑到网吧。通宵一夜。毕竟已经被重点高中提前录取了。中考写个名字就成了。···················开端,永远不能左右结局。2.高中第一次月考。语数外三门66.其余险上。不过化学

2014-02-23 10:02:59 1869 6

原创 poj 1170 记忆化搜索

#include #include #include #include using namespace std;#define MAX 0x3f3f3f3fstruct BP{ int cnt; int num[6]; int price;};int hash[1000];BP bp[100];int B, S;int number[6], pr

2014-02-22 16:20:21 779

原创 poj 1141 DP

我用记忆化搜索写的,先用dp[i][j]求出括号串i到j复原后最短是多少,然后再输出。有一点就是,输入数据要用gets,用scanf!=EOF会WA。。。呵呵AC代码如下:#include #include #include #include using namespace std;#define MAX 0x3f3f3f3fint dp[110][110];char

2014-02-21 20:31:17 628

原创 poj 1080 DP

这题我用记忆化搜索做的。。。。直接递推上去的:点击打开链接这题的方法就是dp[i][j]代表a的前i个字符与b的前j个字符所能获得的最大的匹配值然后转移就是ans = max( ans, score[num1[pos1]][num2[pos2]] + DFS( pos1 - 1, pos2 - 1 ) );//a[i]与b[j]匹配ans = max( ans, score[

2014-02-21 13:48:28 671

原创 poj 1037 DP

大致就是一位一位的遍历,比方说第一位,看1在最前有temp种情况,然后temp和C比较,如果比C大,第一位为1,否则C=C-temp,看2在第一位有多少种情况,然后和C比较,依次类推long long DFS( int statu, int a, int b )  statu == 0 表示之前是递减,然后有a个大数,b个小数的个数statu == 1 表示之前是递增,然后有a个大数,

2014-02-20 22:06:06 670

原创 poj 1019 二分

sum记录从1到1 12 123 。。。123...i 的总位数然后用二分搜k是在1到几的序列中然后再遍历一遍就行AC代码如下:#include #include #include #include #include using namespace std;long long sum[50000];int init_sum(){ long long pre = 1;

2014-02-19 12:27:55 694

原创 hdu 1813 IDA*

h()为当前所有点到边界的最小步数的 最大值要用bfs预处理下每个点到边界的最小距离,只就用直线距离会错AC代码如下:#include #include #include #include #include #include using namespace std;#define MAX 0x3f3f3f3fstruct Point{ int x, y;}

2014-02-19 09:41:24 775

原创 hdu 1560 IDA*

开一个数组来记录当前枚举出的字符串已经包含了每个所给的字符串多少个字符了然后h函数为  每个所给字符串未包含的字符数的 最大值AC代码如下:#include #include #include #include using namespace std;#define MAX 0x3f3f3f3fchar s[10][10];int N;int length[10],

2014-02-18 15:22:57 721

原创 hdu 2234 IDA*

都是泪。h_row()是求让行相等的最少步h_col()是求让列相等的最少步然后神奇的是:if( h_col() + deep //************ //*********}这样是不行的int tempp = min( h_col(), h_row() );if( tempp + deep //******* //******}而这个才是正确的。。。。次奥

2014-02-18 13:17:48 693

原创 hdu 1667 IDA*

第一道IDA*。。。。。。给链接:点击打开链接AC代码如下:#include #include #include #include using namespace std;int num[7][7];int maxdeep;char record[1000];bool check(){ int temp = num[2][2]; for( int i = 2;

2014-02-18 08:46:17 710

转载 写给静不下心来的朋友们

网上看到的,很感动,这几天虽然在努力AC,但是现在才发现还是不够努力。愿自己能够吃尽世间所有苦楚,去换取一个属于自己的未来。原文如下:写给我准备考研的朋友们这是阮晔老师上课时说过的话,很振奋人心,在这里与好友们一起分享 短暂的时间内,有什么活动能够比学习能够迅速改变自己命运来成就自己未来!你要牢牢的记住,你现在在世界上无所凭靠,我们父母都没有什么良好的背景,没有可凭靠的背景,你

2014-02-17 20:44:50 924

原创 poj 1742 多重背包O(NM)

O(NM)的多重背包不给自己写讲解,下次再遇到,不会再看一遍,从感觉没理解透AC代码如下:#include #include #include #include #include using namespace std;bool dp[100000];int cnt[100000];int num[100], value[100];int N, M;int ma

2014-02-17 19:13:04 708

原创 poj 1699 TSP

参考:点击打开链接AC代码如下:#include #include #include #include #include using namespace std;#define MAX 0x3f3f3f3fint increase[11][11];int N;int dp[11][1<<11];char s[11][30];int calc_lcs( strin

2014-02-17 14:39:50 797

原创 poj 1690 暴力

毛线的dp。。。。什么分类卧槽。。。。不过这题得到的思想就是,题目就是要我们消去括号,那么就思考消去括号有哪些情况:1、前面没有负号2、中间只有一个括号AC代码如下:#include #include #include #include using namespace std;int main(){ char s[300]; bool mark[300]; i

2014-02-17 10:26:58 681

原创 poj 1664 记忆化搜索

AC代码如下:#include #include #include #include using namespace std;int dp[11][11][11];int record[100];int DFS( int m, int n, int pre ){ if( m == 0 && n == 0 ){ // for( int i = 3; i >= 1; i--

2014-02-17 09:15:58 661

原创 hdu 2611 DFS

日!AC代码如下:#include #include #include #include #include using namespace std;#define MAX 0x3f3f3f3fstruct Node{ int num, index;};int N, P, cnt, record[110];Node nodes[110];int cmp( co

2014-02-16 14:53:30 681

原创 poj 1609 DP二分没A掉!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#include #include #include #include using namespace std;#define MAX 0x3f3f3f3fstruct Node{ int x, y;};int cmp( const void *a, const void *b ){ if( ((Node*)a)->x != ((Node*)b)->x ){ retu

2014-02-15 18:54:31 504

原创 poj 1458 DP

最长公共子序列AC代码如下:#include #include #include #include using namespace std;int main(){ char a[1000], b[1000]; int dp[2][1000]; while( scanf( "%s%s", &a[1], &b[1] ) != EOF ){ memset( dp,

2014-02-15 14:35:52 555

原创 poj 1456 DP

dp[i][j]表示i到N-1物品在j到maxdeadline时间内所获得的最大收益这题要排序之后,从截至日期大的开始向小的更新。要用滚动数组,不然会超出内存AC代码如下:#include #include #include #include #include using namespace std;#define MAX 0x3f3f3f3fstruct Nod

2014-02-15 14:22:58 601

原创 poj 1414 DP

网上搜的分类是DP,但是遍历就行了。。。。只不过有点麻烦。。。。。AC代码如下:#include #include #include #include #include using namespace std;#define MAX 0x3f3f3f3fstruct Point{ int x, y;};struct Group{ int id; int siz

2014-02-15 13:27:37 713

原创 poj 1322 概率DP

开始的时候被数据吓到了,最后看了别人博客发现是可以缩减的。状态方程:dp[i][j] = dp[i-1][j-1] * ( C - j + 1 ) / C + dp[i-1][j+1] * ( j + 1 ) / C;因为这是收敛的,所以当i一定大的时候,由于精度的问题,可以不再计算,然后通过找规律可以发现:图片来自:点击打开链接可以发现到最后只是奇偶交换而已这一题的讨

2014-02-14 10:39:28 643

转载 背包九讲

链接:点击打开链接

2014-02-13 20:29:54 554

原创 poj 1208 模拟而已

毛线的dp题目理解了好半天然后WA了半天。。。。mapping那里搞错了操操操好蛋疼的模拟,不是题目蛋疼,是自己蛋疼。。。。操操操AC代码如下:#include #include #include #include #include using namespace std;int mapping[25];int s[25][100];int num[25]

2014-02-13 19:47:16 1024

原创 poj 1189 DP

dp_a/dp_b表示从(i,j)开始到M的概率AC代码如下:#include #include #include #include using namespace std;long long dp_a[55][55], dp_b[55][55];int N, M;int maps[55][55];char c;void DFS( int i, int j ){ i

2014-02-13 15:26:19 495

原创 poj 1179 记忆化搜索

注意一点:在加法的时候最大值肯定是两个最大值相加,最小值肯定是两个最小值相加在乘法的时候 最大值可能是两个最大值相乘 也可能是两个最小值相乘,最小值可能是两个最小值相乘,也可能是一个最大值和一个最小值然后我用的是记忆化搜索:dp_min[i][j]表示区间i到j的最小值, dp_max[i][j]表示区间i到j的最大值AC代码如下:#include #include #in

2014-02-13 13:31:26 738

原创 poj 1163 DP

简单dp。。。AC代码如下:#include #include #include #include using namespace std;int main(){ int num[110][110], dp[110][110]; int N; while( scanf( "%d", &N ) != EOF ){ for( int i = 0; i < N; i++

2014-02-11 11:40:46 527

算法导论及课后习题与思考题答案

算法导论及课后习题与思考题答案 特别清晰,欢迎下载

2013-07-20

C++编程思想[第二卷]

C++编程思想[第1卷]的pdf,个人觉得还是比较清晰的,欢迎下载

2013-07-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除