摘要:
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25843思路:我们可以发现题目与点的X坐标没有关系,于是可以直接对y坐标进行排序,然后进行dp,dp[i][j]表示以j个区间覆盖前i个点的最大覆盖数。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define MAXN 111 7 #define FILL(a,b) memset(a,b,sizeof(a)) 8 9 int n,w,k,dp[MAXN][MAXN]. 阅读全文
摘要:
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26868思路:拆点,容量为最多能跳的步数,然后设立一个超级源点,源点与各点两连边,容量为一开始的企鹅数,最后就是枚举汇点了,跑最大流验证即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define MAXN 222 9 #define MAXM 222222 10 #define inf 1que; 40... 阅读全文
摘要:
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25839思路:第一小问可以很快求出了,两个字符串的长度-LCS,然后第二问就要记忆化搜索了,dp[i][j][l]表示A串的前i个和B串的前j个组合,长度为l的组合数。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define MAXN 33 7 #define FILL(a,b) memset(a,b,sizeof(a)) 8 typedef long long ll 阅读全文
摘要:
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25837思路:状态压缩+记忆化搜索。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define FILL(a,b) memset(a,b,sizeof(a)) 7 8 int dp[1<<17],map[17][17]; 9 int n;10 11 int dfs(int state,int m)12 {13 if(state==0)return 0;14 阅读全文
摘要:
题目链接:http://poj.org/problem?id=1463思路:简单树形dp,如果不选父亲节点,则他的所有的儿子节点都必须选,如果选择了父亲节点,则儿子节点可选,可不选,取较小者。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 2222 8 #define FILL(a,b) memset(a,b,sizeof(a)) 9 10 int n,dp[MAXN][2];11 vectorg[MAXN];12 13 int dfs(int u,int 阅读全文