
动态规划
Silent-Jy
生活是坚持出来的。
展开
-
NYOJ-36:最长公共子序列
/*LCS。 f[i][j] = f[i-1][j-1] if x[i] = y[j] = max{f[i-1][j],f[i][j-1]} if x[i]!=y[i] */ #include #include #define N 1005 char s1[N],s2[N]; int f[N][N]; int LCS() { int i,j; int n = strlen(s1)原创 2013-01-31 20:36:25 · 768 阅读 · 0 评论 -
NYOJ-79:拦截导弹
/*动态规划 状态转移方程 f[i]=max{f[j]}+1 0h[i] */ #include #include #define N 23 int h[N]; int f[N]; //保存f[i]当前最多拦截数0<=i<N int main() { int t,m,i,j,max,max2; scanf("%d",&t); while(t--) { scanf("%d",&m)原创 2013-01-20 12:58:40 · 1322 阅读 · 0 评论 -
NYOJ-17:单调递增最长子序列
/*写了两个版本,一直找不出第一个程序哪里错了。先放着,回头再来继续改 f[i] = max{f[j]}+1 0<=j<i && str[j]<str[i] */ /* #include #include #include using namespace std; #define N 10005 char str[N]; int f[N]; int main() { int t,max2;原创 2013-01-20 14:34:32 · 807 阅读 · 0 评论 -
HDU-1421:搬寝室
/* 状态方程:dp[i][j] = min{ dp[i-1][j], dp[i-2][j-1]+(w[i]-w[i-1],2)^2 },0<j*2<=i 其中dp[i][j]表示前i个物品拿j对 在第i个物品的有两种情况,一:第i-1个物品和前面的物品恰好形成j对 二:第i-1个物品没有形成j对,由i-1个物品和第i个物品形成j对 */ #include #inc原创 2013-05-01 19:11:46 · 715 阅读 · 0 评论 -
HDU-1160 FatMouse's Speed
//状态方程 m[i].dp = max{ m[j].dp } 0m[i].s #include #include #define SIZE 1000+5 typedef struct mice { double s,w; int num; //原来的位置 int dp; int pre; //记录前一个老鼠的位置 }Mice; int cmp(const原创 2013-05-01 16:20:59 · 662 阅读 · 0 评论