dp
乐哥不焦虑
这个作者很懒,什么都没留下…
展开
-
HDOJ 1114 Piggy-Bank 完全背包
#include"stdio.h"//#include"stdlib.h"#define INF 100000000#define maxn 10010int p[510],w[510],f[maxn];int min(int a,int b){return a<b?a:b;}main(){ int a,b,t,i,j,v,n; scanf原创 2012-02-28 00:26:20 · 489 阅读 · 0 评论 -
poj 1337 A Lazy Worker
这里用dp[ i ]表示时刻 i 及其之后的时间里所需工作的最少时间,那么从后向前递推即可, 一个重要条件是 di - ai #include #include #include #include #include using namespace std;vector t[300];int dp[400]; int l[300], a[300], d原创 2012-10-31 19:51:35 · 1817 阅读 · 0 评论 -
poj 1691 Painting a Board(状态压缩DP)
#include #include #include #include using namespace std;struct sq{ int lx, ly, rx, ry; int col; void get(){ scanf("%d %d %d %d %d", &ly, &lx, &ry, &rx, &col);原创 2012-10-31 20:02:55 · 5239 阅读 · 0 评论 -
POJ 1947 Rebuilding Roads(树状DP)
#include #include #include #include using namespace std;const int inf = 1000000; #define N 151 int d[N][N];int cld[N], bro[N];bool fa[N]; int n, p;void dfs(int s){ for (int i = 0; i原创 2012-10-31 21:28:32 · 1698 阅读 · 0 评论 -
ZOJ 1679 Telescope (DP)
利用重叠子问题,f [ i ][ j ][ k ] 表示 i 到j 的圆弧内的点 取 k 变形的最大面积。#include #include #include using namespace std;// 规范相交#include const double PI = 3.1415926535898; struct Point{ double x,原创 2012-10-31 21:32:57 · 1740 阅读 · 0 评论 -
POJ 1661 Help Jimmy
简单的DP,利用重叠子问题,详见代码#include #include #include #include #include using namespace std;#define N 1010int d[N][2];struct stage{ int l, r, h; int lnext, rnext; stage(in原创 2012-10-31 22:01:44 · 1581 阅读 · 0 评论 -
POJ 1161 WALLS
主要难在构图上,很麻烦。用的Floyd 110ms#include #include #include #include #include #include using namespace std;#define RMAX 210int G[RMAX][RMAX];set person[30]; //每个人所相邻的区域 int personat[30]; //原创 2012-10-31 22:20:47 · 1715 阅读 · 0 评论 -
POJ 1159 Palindrome
#include #include #include #include #include using namespace std;#define N 5010int d[2][N];char s[N]; // if (i == j)m[i][j] = m[i + 1][j - 1];// else m[i][j] = min(m[i][j - 1], m[i + 1]原创 2012-10-31 22:51:17 · 1746 阅读 · 0 评论 -
UVA 10911 Forming Quiz Teams(状态压缩DP)
#include #include #include #include using namespace std;double d[65537];int n, des;double dis[16][16];int x[16], y[16];const int inf = 100000000; double f(int i, int j){ return sq原创 2012-10-31 22:56:35 · 1684 阅读 · 0 评论 -
uva 10635 Prince and Princess(稀疏LCS)
nlogn#include #include #include #include #include using namespace std;#define N 100000 int a[N], b[N], c[N]; int bs(int *f, int l, int r, int nu){ while (l < r){ int m原创 2012-10-31 22:58:26 · 1737 阅读 · 0 评论 -
uva 348 Optimal Array Multiplication Sequence
最优矩阵链乘 算法导论上有 #include #include #include using namespace std;#define inf 1000000000000000 //矩阵链乘 int p[12];long long dp[12][12];int s[12][12];void printf_path(int i, int j){ i原创 2012-07-28 20:08:17 · 352 阅读 · 0 评论 -
UVA 111 History Grading 最长公共子序列
最长公共子序列,算法导论上有。唯一要注意的是这段话Given the correct chronological order of n events as where denotes the ranking of eventi in the correct chronological order and a sequence of student responses w原创 2012-07-28 10:48:07 · 774 阅读 · 0 评论 -
uva 147 Dollars
Dp[i][j] 表示前 i 种硬币构成面值 j 的方案数,那么 Dp[i][j] = dp[ i - 1 ][ j ] + Dp[ i ][ j - a[ i ] ]其中a[ i ]指第i种面值然后用滚动数组 #include #include using namespace std;int a[] = {1, 2, 4, 10, 20, 40, 100,原创 2012-07-28 20:06:28 · 271 阅读 · 0 评论 -
HDOJ 1024 Max Sum Plus Plus
ans=max{dp[m,j]}(m其中dp[m,j]为数组中前j个数的m段的最大和,且第m个段包含a[j];而dp[i][j]=max{dp[i,j-1]+a[j],max{dp[i-1,t]+a[j]}}(i-1=dp[i][j]只与dp[i][j-1]及i-1阶段j之前的max(dp[i-1][t])有关,故只保存当前阶段的dp值和用b数组保存上一阶段的最大值#include原创 2012-02-28 00:00:44 · 923 阅读 · 0 评论 -
poj3670 eating together 简单的dp
方法一:LIS/LDS#include"stdio.h"int lis[30001],lds[30001]; int main(){ int n,t,len1=0,len2=0,i,left,right,mid; lds[0]=0x7fffffff; lis[0]=-1; scanf("%d",&n); for(i=1;i<=n;原创 2012-03-06 17:02:46 · 577 阅读 · 0 评论 -
HDOJ 2602 Bone Collector 01背包问题
#include"stdio.h"#include"string.h"#include"stdlib.h"#define MAX 1010int f[MAX],value[MAX],cost[MAX];main(){ int i,v,n,t,j; scanf("%d",&t); while(t--) {原创 2012-02-28 00:34:13 · 467 阅读 · 0 评论 -
uva 624 CD (0-1背包打印路径)
#include #include #include #include using namespace std;const int inf = 1000000;#define N 1000000 int dp[22][N];int a[22];int n, t; void printf_path(vector& v, int c) { for (int i原创 2012-07-28 20:21:55 · 382 阅读 · 0 评论 -
uva 11081 strings
参考http://par.cse.nsysu.edu.tw/~advprog/advprog2008/11081.doc。那么 对S3当前第K个字符c, 用t = pos[ i ] [ j ] [ c - 'a']表示Si第 j 个字符以前最近的字符c出现的位置,那样可以省去不少时间初始化应该f[ 0 ][ i ][ j ]初始化为 1, #include #includ原创 2012-07-28 20:37:22 · 478 阅读 · 0 评论 -
uva 103 Stacking Boxes(DAG上的最长路径)
简单的动态规划,白书上的DP一章里有介绍。 #include #include #include #include using namespace std;int a[31][11];bool G[31][31]; int d[31]; bool lower(int* x, int* y, int n){ for (int i = 0; i < n; i原创 2012-07-28 10:57:07 · 357 阅读 · 0 评论 -
UVa 10003 Cutting Sticks
i, j 为第i个切割点和第j个切割点,dp[i][j] =min(dp[i][j], dp[i][k] + dp[k][j]) + a[j] - a[i];这样只要开 52 * 52数组就可以了 #include #include #include #include #include #define N 55 //看看LLC的优化方法 using namesp原创 2012-07-28 11:35:53 · 287 阅读 · 0 评论 -
uva 10131 Is Bigger Smarter?
先将原数组按weight上升的顺序排列,weight相同则按S值下降的顺序,然后针对S值 d[i]为以i开头的S下降序列的最大长度, d[i] = max(d[j]) + 1(Sj i); front 用来保存路径 #include #include #include #include using namespace std;#define N 1002原创 2012-07-28 19:53:10 · 330 阅读 · 0 评论 -
uva 10564 Paths through the Hourglass
记忆化搜索。注意用 long long#include #include #include #include #include #include using namespace std;const int inf = (-1u>>1);typedef long long lld; int a[50][25];lld d[50][25][505];int n原创 2012-10-31 23:16:00 · 1649 阅读 · 0 评论