2011年5月6日

ACM PKU 1163The Triangle http://acm.pku.edu.cn/JudgeOnline/problem?id=1163

摘要: dp求最长序列和问题,题目比较简单,短小精悍!代码:#include <iostream>using namespace std;int flag[101];int num[101][101];int main (){ int N; int i , j ; cin >> N;memset(flag, 0, sizeof(flag));for (i = 1; i<=N ; i++) for (j = 1; j <= i; j++) scanf ("%d",&num[i][j]); for (i = 1; i<=N ; i++) 阅读全文

posted @ 2011-05-06 19:05 _Clarence 阅读(182) 评论(0) 推荐(0) 编辑

ACM PKU 2533 Longest Ordered Subsequence http://acm.pku.edu.cn/JudgeOnline/problem?id=2533

摘要: 动态规划,最长递增子序列(不是非递减子序列);做法很简单,直接按照模板做就行了,主要是要想明白其中的道理,用什么存取加入第 i 个长度后当前的最长递增长度。两层循环,i 表示对第 i 个长度进行考察,j 表示对于 longer[i] 进行递增长度确定;写个状态转移方程就都明白了!状态转移方程:longer[i] = max{num[j]+1;其中1<j < i};不知道对不对,总之就是这个意思吧!见笑了!!!#include <iostream>using namespace std;int num[10001];int longer[10001];int longes 阅读全文

posted @ 2011-05-06 19:05 _Clarence 阅读(96) 评论(0) 推荐(0) 编辑

ACM PKU 1651 Multiplication Puzzle http://acm.pku.edu.cn/JudgeOnline/problem?id=1651

摘要: 这是一个很经典的DP问题--矩阵连乘问题;题目大意是给定n个数,移除每个数的代价是其与左右两数的乘积,求移除剩两个数的需要花费的最小代价。我对题目进行解读主要是帮助那些对矩阵连乘问题不太熟悉了兄弟们,希望通过本菜鸟的解说,能帮助你们加速理解核心代码意思!状态转换方程:sign[i][j] = min{sign[i][k]+sign[k][j]+num[i]*num[k]*num[j];其中i<k<j};下面我对我的code作注(加粗字为核心代码):#include <iostream>using namespace std;const int MAX = 101;int 阅读全文

posted @ 2011-05-06 19:04 _Clarence 阅读(147) 评论(0) 推荐(0) 编辑

ACM PKU 1160 Post Office http://acm.pku.edu.cn/JudgeOnline/problem?id=1160

摘要: 来之不易呀!!!用opt[i][j]记录把前i个邮局建到前j个村庄中的最优解用cost[i][j]记录所有在i到j村庄中,建1个邮局的最小代价。显然邮局应该设到中点。让前i个邮局覆盖前j个村庄,第i+1个邮局覆盖第j+1至j+k个村庄(j+k<=n),则状态转移方程为opt[i+1][j+k]=min{opt[i][j]+cost[j+1][j+k];} (k+j<=n)#include <iostream>using namespace std;const int MAX = 3000000;long cost[301][301];long opt[301][301] 阅读全文

posted @ 2011-05-06 19:03 _Clarence 阅读(146) 评论(0) 推荐(0) 编辑

ACM PKU 1579 Function Run Fun http://acm.pku.edu.cn/JudgeOnline/problem?id=1579

摘要: 连我就能十分钟以内搞定的代码还有什么好说的呢!提醒一下,用递归是多么愚蠢,用记忆搜索才是王道,还有注意格式,最好直接粘原题!!!#include <iostream>using namespace std;int max = 21;int sign[21][21][21];void init(){int i, j, k; sign[0][0][0] = 1;for (i = 0;i < 21; i++ )for (j = 0;j < 21; j++ ){sign[0][i][j] = 1;sign[i][0][j] = 1;sign[i][j][0] = 1;} for 阅读全文

posted @ 2011-05-06 19:02 _Clarence 阅读(157) 评论(0) 推荐(0) 编辑

ACM PKU Testing the CATCHER http://acm.pku.edu.cn/JudgeOnline/problem?id=1887

摘要: 这个是最令我无奈的DP了,算法什么难度都没有,关键是初始化和数组下标问题,下面代码中我标记一下,希望大家能够引起注意:#include <iostream>using namespace std;static int flag = 1;int num[32768];int longer[32768];int init(int n){int i , longest = 1;for (i = 0 ; i <=32767 ; i++) longer[i] = 1;for (i = 2;i <= n; i++) for (int j = 1; j < i; j++) { 阅读全文

posted @ 2011-05-06 19:01 _Clarence 阅读(146) 评论(0) 推荐(0) 编辑

ACM PKU Lake Counting http://acm.pku.edu.cn/JudgeOnline/problem?id=2386

摘要: 虽然是深搜,但是用递归不用队列一样过了,太庆幸了,真是傻人有傻福啊!高兴,呵呵....#include <iostream>#include <queue>using namespace std;int temp = 0;int M, N;char rtg[101][101];int flag[101][101];bool situation(int m , int n){if ((flag[m][n]==0)&&(m > 0) && (m <= M ) && (n > 0) && (n 阅读全文

posted @ 2011-05-06 19:00 _Clarence 阅读(129) 评论(0) 推荐(0) 编辑

ACM PKU Camelot http://poj.org/problem?id=1178

摘要: #include <iostream>//#include <queue>using namespace std;// queue <code> myqueue;int flag[64][8][8];int shore[64];char encode[64];int count = 0;bool charge (int a, int b){if (a >= 0 && b >= 0 && a < 8 && b < 8) return true ;else return false;}voi 阅读全文

posted @ 2011-05-06 18:59 _Clarence 阅读(154) 评论(0) 推荐(0) 编辑

ACM PKU 1019 Number Sequence http://acm.pku.edu.cn/JudgeOnline/problem?id=1019

摘要: #include <iostream>#include <cmath>using namespace std;int Len(int n) // 求数字的长度函数;{ return log10(double(n)) + 1;}int oj (int i, int temp) //一个比较傻的打表;不为别的,就选择最省时的;{if (temp < 10) return temp;if (temp < 100){ if (i == 1) return temp/10; else return temp%10;}if (temp < 1000){ if (i 阅读全文

posted @ 2011-05-06 18:55 _Clarence 阅读(94) 评论(0) 推荐(0) 编辑

0-1背包 和 完全背包

摘要: 0-1背包状态转移方程:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}“将前i件物品放入容量为v的背包中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i件物品,那么问题就转化为“前i-1件物品放入容量为v的背包中”,价值为f[i-1][v];如果放第i件物品,那么问题就转化为“前i-1件物品放入剩下的容量为v-c[i]的背包中”,此时能获得的最大价值就是f[i-1][v-c[i]]再加上通过放入第i件物品获得的价值w[i]。优化空间复杂度后得到:for i=1..N for v=V..0 f[ 阅读全文

posted @ 2011-05-06 18:54 _Clarence 阅读(163) 评论(0) 推荐(0) 编辑

导航