摘要:
题意:略分析:记忆化搜索用dp[i][j] 表示 i 次攻击得到少于j分的方案hdu4504#include<iostream>#include<algorithm>#include<stdio.h>#include<stdlib.h>#include<string.h>using namespace std;const int N = 20 + 5;const int M = 600 + 10;__int64 f[N];__int64 dp[N][M];int s[3] = {1, 2, 3};void init(){ f[0] = 阅读全文
摘要:
题意:忽略题目背景,就是要收集最多的钱, 如果第i天拿到了si 的钱, 那么第i+x[i] 天 到 第i + y[i] - 1 天必须再拿一次,否则就再也拿不到钱了,当然,第i +x[i]天之前也是拿不到的, 题目要求第一天必须拿。。分析:一开始想到了用记忆化搜索,代码很短, 一下就敲完了, 结果也果断超时了后来想到了按记忆化搜索的思路,直接从最后一天开始算起,用dp[i] 表示第i天拿到了钱之后,到第n天为止,最多拿到的钱数,那么dp[i] = s[i] + max(dp[j]) (i + x[i] <= j <= i + y[i] - 1)到这一步就很明显了,这里涉及到了区间最 阅读全文
摘要:
题意:给定N 个字符串,每个字符串长度为小于等于10 ,要求得到一个排列,s[i] 为str[i] 和str[i - 1] 通过移动,相同位置上相同字符的个数,求max(s[1] + s[2] + s[3] +...)分析:aaa 和 abc 的相同的字符数 为1abc 和 adc 相同的字符数为2cde 和 bfcde 相同的字符数为3N个总数只有10, 很容易就想到了状态压缩,我们用dp[j][i]表示以第一个串结尾, 状态为j时 最大的相同字符数, j 的二进制位上每一个位的0 或1 表示是否已选了第几个串pku2817#include<iostream>#include&l 阅读全文