- 博客(7)
- 资源 (1)
- 收藏
- 关注
原创 poj 3181 Dollar Dayz
题意:农夫约翰有N元钱,市场上有价值1……K的商品无限个,求所有的花钱方案? 分析:完全背包+模拟大数,注意加前导0 #include #include #include using namespace std; #define MAXN 1005 #define MAXM 105 long long const MOD = 1e17; long long dp1[MAXN],dp2[
2014-11-30 14:33:42 612
原创 poj 3046 Ant Counting
题意:T种蚂蚁,共计A只,种内没有区别,问含有x只蚂蚁的子集有多少种(x∈[S,B]) 分析 :1.类比C[i][j]相当于把每个种类增加到A只; 2.所以可以从类似组合公式的递推下手; 3.dp[i][j] 代表前i种蚂蚁取j只的情况数 4.转移方程可以继续类比,dp[i][j] = dp[i - 1][k](0 5.转移时可以用前缀和思想优化 #i
2014-11-30 14:29:37 601
原创 poj 1742 Coins
题意:有n种面额的硬币,面额个数分别为A_i、C_i,求最多能搭配出几种不超过m的金额? 分析:1.想到类似于完全背包,只是每个物品数量有限制 2.看到搭配出的钱数有最大上限,可以将其变成数组索引; 3.类似于完全背包的转移,不过每次转移需要记录用过多少金币,或者还剩多少 4.dp[i][j]表示第i种金币,搭配出j块钱还剩多少数量的硬币,其中dp值为负代表无法搭配出这个数目的
2014-11-30 13:58:23 554
原创 poj 3280 Cheapest Palindrome
题意:回文串,给你一串字符,通过添加删除其中的一部分,使其变成一个回文串,并且花费最小(添加删除都有权值) 分析:1.添加和删除可以起到相同的效果,所以取花费少的那种 2.dp[i][j],表示从i到j的产生最便宜回文串的花费 3.开始想从区间的一个端点开始更新,每次更新需要遍历整个区间 4.后想到遍历可以化简为仅仅对两个端点的比较 dp[i]
2014-11-30 13:43:52 524
原创 poj 3616 Milking Time
题意:你有一头奶牛,你能够在一定的时间里挤奶。而且挤奶量也不同,每次挤奶要休息r时间,问你最大可以挤多少奶。 分析:每个时间段dp[i]的最大产奶量需要和此时间段前面的每一个dp[j]作比较,所以想到排序,后从区间中找到最大值,这里面用树状数组解决 #include #include #include #include using namespace std; #define MAXN 200
2014-11-30 12:57:28 539
原创 poj 2385 Apple Catching
题意:有两棵苹果树,标号分别为1,2。每分钟有其中的一棵树会掉下一个苹果,奶牛一分钟只能在其中一棵树下接到苹果,但她不知道下一分钟会是那棵树掉下苹果,所以她就要在两棵树下来回跑。但她只会在树下跑W次。问你在T分钟内,奶牛最多能接到多少苹果。 分析:T分钟,W次机会,很像01背包,所以dp[i][j] 第i分钟费w点能量,得到的最多的苹果数目,进行状态转移 #include #inc
2014-11-30 12:41:34 624 1
原创 poj 2229 Sumsets
每个状态都与其前面的状态有关 分奇偶讨论 1.从偶数到奇数对分解式不产生影响 2.从奇数到偶数会多产生合并 #include #include #include using namespace std; #define MAXN 1000010 #define MOD 1000000000 int dp[MAXN]; int main() { dp[1] = 1; for(
2014-11-30 12:38:20 565
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人