摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1421DPdfs记忆化搜索写的,没空间优化 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define N 2013 5 6 int n, k, a[N], dp[N][N]; 7 8 int min(int x, int y) 9 {10 return x<y? x: y;11 }12 13 int sq(int x)14 {15 return x*x;16 }17 18 int dfs(int i, int j)19 {20 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1058DP#include <stdio.h>#define N 5848int h[N];int a[4];int p[4] = {1, 1, 1, 1};int min(){ int i, flag = 0; for(i=1; i<4; i++) { if(a[i] < a[flag]) { flag = i; } } for(i=0; i<4; i++) { if(a[i] == a[fla... 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1024DP最大m个不重叠连续子段和 1 #include <stdio.h> 2 3 #define N 1000100 4 5 int a[N], dp1[N], dp2[N]; 6 7 int max(int x, int y) 8 { 9 return x>y? x: y;10 }11 12 int main()13 {14 int i, j, n, m;15 while(~scanf("%d%d", &m, &n))16 {17 for(i=1; 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1160DP,LIS 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 struct Point 5 { 6 int x, y, num; 7 }p[1234]; 8 9 int cmp(const void *a, const void *b)10 {11 return ((struct Point *)b)->x - ((struct Point *)a)->x;12 }13 14 int n, dp[1234], pre[12 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=2602DP,0-1背包 1 #include <stdio.h> 2 #include <string.h> 3 4 #define N 1234 5 6 int n, m; 7 int dp[N], v[N], w[N]; 8 9 int main()10 {11 int t, i, j;12 scanf("%d", &t);13 while(t-- && scanf("%d%d", &n, &m))14 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1114DP,完全背包 1 #include <stdio.h> 2 3 int main() 4 { 5 int t, i, j, n, m, m1, v, w; 6 int dp[10010]; 7 scanf("%d", &t); 8 while(t-- && scanf("%d%d%d", &m1, &m, &n)) 9 {10 m -= m1;11 dp[0] = 0;12 for(i=1; i< 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1203DP,0-1背包和0-1背包稍有差别:状态转移方程:dp[j] = max(dp[j], dp[j-w[i]]*v[i])P(至少一份offer) = 1 - P(一个offer也没有)P(一个offer也没有) = Mul(1 - P(拿到 i 学校的offer)) (其中i为选择的学校)#include <stdio.h>#define N 10010int n, m;float dp[N], v[N];int w[N];int main(){ int i, j; while(scanf 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=2844DP,部分背包耗费:钱币的面值,价值:全为1,数量:每种钱币的数量,求恰好装满的dp值,初始化dp[0]=0,dp[1~m] = “负无穷”,最后遍历dp[1~m],如果能恰好装满(dp值为正)就算一种,统计一共有多少种 1 #include <stdio.h> 2 #include <string.h> 3 4 #define N 100100 5 6 int n, m; 7 int dp[N], w[123], num[123]; 8 const int minint = - 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=2191DP,部分背包 1 #include <stdio.h> 2 #include <string.h> 3 4 #define N 123 5 6 int n, m; 7 int dp[N], w[N], v[N], num[N]; 8 9 void pack01(int wi, int vi)10 {11 int j;12 for(j=m; j>=wi; j--)13 {14 if(dp[j-wi]+vi > dp[j])15 {16 ... 阅读全文