摘要:
这是一道动态规划的dps问题,注意深搜的过程中做到记忆化搜索。代码如下:#include<stdio.h>#include<string.h>int n, R, C, max, a[105][105], f[105][105];char name[100];int dp(int i, int j){ if(f[i][j] != 0) return f[i][j]; if(i<=R&&i>=1&&j<=C&&j>=1) { int k, p, q; if(a[i][j] > a[i-1][j]) 阅读全文
摘要:
完全背包问题,背包九讲细看一下,还有一点灵活的运用:打印剩余时间那块。代码如下:#include<string.h>#include<stdio.h>#define MAXN 10010int a[3], t, f[MAXN];void solve(){ int n = 0; memset(f, 0 , sizeof(f)); f[0] = 1; for(int i = 1; i < 3; i ++) { for(int j = a[i]; j <= t; j ++) { if(f[j] < f[j - a[i]]... 阅读全文
摘要:
最长公共子序列问题,打印路径总结了两个方法,一个是递归指向,就像前面做的01背包问题如:for(int i = 1; i < n; i ++) for(int j = 0; j < n-i; j ++) for(int k = j; k < i+j; k ++) { if(k == j) { f[j][i+j] = f[j][k]+f[k+1][i+j]+A[j][0]*A[k][1]*A[i+j][1]; ... 阅读全文