
动态规划
z__001
ACMer.
展开
-
POJ - 1321
题意略题解1(状态压缩DP)分析之前所用的DP数组下标都是整数的形式, 为了用DP求解, 就需要将题目所给的棋盘抽象成整数. 注意到一行棋子的可能状态可以用1<代码#include<set>#include<map>#include<cmath>#include<queue>#include<cctype>#include<cstdio>#include<vector>#includ原创 2017-04-11 16:12:44 · 234 阅读 · 0 评论 -
C程序设计大赛B题
题意第一行输入T, 代表T组样例, 接下来输入T行, 每行给出n, k. (1<=T<=100, 1<=n<=1e6, 1<=k<=100).求解1-n这n个数中, 有多少个数的数位和是k的倍数.题解1(数位DP)分析状态定义 DP[i][j]: 代表从低位向高位数i位, 数位和%k等于j的满足题意的个数.数位DP多用记忆化搜索实现, 不用递推式的原因是转移方程难以写出.这道题的搜索方向是从高原创 2017-04-11 13:18:21 · 323 阅读 · 0 评论 -
POJ - 3254
题意农夫在一块M*N的农田上种庄稼,其中有些能种,有些不能种,且要求所种庄稼不能相邻,现求种田方案数. 1<=M,N<=12. input 2 3 1 1 1 0 1 0 output 9题解1(状压DP)分析每一行的状态都可以用一个整数来描述.所以有: dp[i][j]: 前面i+1行, 且第i行的状态为j 的方案数.首先初始化dp数组为全0, 然后先判断第0行的1<< n个状原创 2017-04-11 19:37:25 · 237 阅读 · 0 评论 -
CF918D: MADMAX 题解
题目链接: http://codeforces.com/contest/918/problem/D分析定义DP[u][v][c]: 表示自己当前在u点, 对手在v点, 下一步走的边的权值需要大于等于c时的胜负情况, 1表示自己胜, 0表示自己负. 若u点当前能转移到的所有点中, 有一点x, 能使得DP[v][x][xc] = 0 (其中xc表示u到x这条边的权值), 即说明当前的状原创 2018-02-01 20:50:19 · 282 阅读 · 0 评论 -
CF895C: Square Subsets题解
题目链接http://codeforces.com/contest/895/problem/C题意从n个数中选取不少于1个数, 使得这些数的乘积为平方数的方案数.分析注意到这n个数都为不超过70的正整数, 由算数基本定理可得这n个数一共最多需要19种素数来构造, 如: 17 = 17 36 = 2 * 2 * 3 * 3 70 = 2 * 5 * 7 注意到, 若原创 2018-02-03 20:05:03 · 331 阅读 · 0 评论