![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
Qer_
这个作者很懒,什么都没留下…
展开
-
766C Mahmoud and a Message[字符串][简单dp]
C. Mahmoud and a Messagetime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputMahmoud wrote a message s of lengt原创 2017-02-10 22:09:27 · 387 阅读 · 0 评论 -
HDU5543 Pick The Sticks [背包dp变形]
题意: 用一个线性的箱子放黄金, 金条可以露出来一般而不掉出来。问给定金条长度,价值,箱子长度,问最多能放多少金条。 思路: 如果没有可以露出来的限制,那么为裸的01背包问题。现在多了这个限制,是在状态的定义与转移的时候多了几种情况。 状态:dp[i][0/1/2]表示背包容量为i时, [0]表示没有露出来的金条的情况, [1]表示有一边露出来,[2]表示两边都有露出来的ans 决策: d原创 2017-08-21 17:44:55 · 351 阅读 · 0 评论 -
HDU5616 Jam's balance[背包dp变形]
题意:给定n个砝码,q次询问是否能够称重量为w的物体,使得天平平衡。 思路: 一开始没有考虑天平两边都能放砝码,即物体可以和砝码同时放到一边,所以误以为是裸背包问题。 问题可以用dp[i][j]表示状态:前i个砝码能否称重量为j的物体使得天平平衡。 其取值为0/1 决策:当前砝码为w[i],dp[i][j]可以由状态dp[i-1][j-w[i]]、dp[i-1][j+w[i]]、dp[i-原创 2017-08-21 16:35:05 · 315 阅读 · 0 评论 -
HDU5781 ATM Mechine [概率dp]
题意:一个人去ATM取钱,知道钱最多有n, 她最多能尝试m次,问如果她足够机智,把所有钱都去做的期望次数是多少。(n <= 2000) 思路:由于足够聪明,二分取钱最坏的情况下只需要11次即可取走所有的钱。 所以预处理m = min(m, 12); 定义状态:dp[i][j]表示已知当前钱数的最大上限为i,还能够取钱的次数为j时候的期望。 决策:尝试取k元钱,k能够被取走的概率为i+1−ki原创 2017-08-21 16:56:11 · 353 阅读 · 0 评论 -
HDU1864 最大报销额 [背包dp-浮点数]
题意是给定最大的报销额度,确定最多能报多少发票。 发票有一些小的限制(坑坑坑) 和 裸01背包的区别在于物体的价值的是浮点数,但此题只需要精确两位小数,所以先*100 再/100处理。#include<iostream>#include<string>#include<cstdio>#include<cstring>#include<bitset>#include<algorithm>原创 2017-08-21 17:04:39 · 491 阅读 · 0 评论 -
POJ1837 Balance [背包dp-负值]
题意:给定位置和权重(可以为负值),问位置乘以权重再求和为0的方案数。 思路:用背包dp解决,dp[i][j]表示前i个砝码能凑成和为j的方案数,则dp[n][0]则表示ans, 但存在一个j为负值的情况,所以在所有j 的基础上+10000作为基准。#include<iostream>#include<string>#include<cstdio>#include<cstring>#inc原创 2017-08-21 17:24:20 · 390 阅读 · 0 评论 -
HYSBZ - 4806 炮 [dp]
题意:MxN的棋盘中最多放多少个炮,使得互相不能被打。 dp解决,M,N的范围为100, 不考虑状压。 状态:dp[i][j][k]表示当前行为i,前i-1行有j列没有炮,有k列有1个炮的方案数。 决策: if(j-1>=0) dp[i][j][k] = (dp[i][j][k] + dp[i-1][j-1][k]*(m-(j-1)-k))%p; ///在没炮的地方放一个原创 2017-08-21 17:35:17 · 327 阅读 · 0 评论 -
动态规划总结与题目分类
源博客链接:http://blog.csdn.net/cc_again/article/details/25866971动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强,主要考察思维能力、建模抽象能力、灵活度。 动态规划(英语:Dynamic programming,DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解转载 2017-08-21 17:01:33 · 357 阅读 · 0 评论 -
Bomb [数位DP]
题目与传统数位DP略有不同,是求区间内带有49的数字的个数。 如果是求不带有49的,那会非常简单,如果求带有49的,只需要在每次dfs找到可行情况的时候将后面的结果都加上。 如果上一位是4,且这一位是9,那么根据是否是limit限制,确定之后有的个数加上。 否则直接dfs下一位。#include <cstdio>#include <cstring>#include <iostream>#i原创 2017-08-12 13:30:56 · 281 阅读 · 0 评论 -
F(x) [数位DP]
For a decimal number x with n digits (A nA n-1A n-2 … A 2A 1), we define its weight as F(x) = A n * 2 n-1 + A n-1 * 2 n-2 + … + A 2 * 2 + A 1 * 1. Now you are given two numbers A and B, please calculat原创 2017-08-12 13:58:15 · 375 阅读 · 0 评论 -
B-number[数位DP]
题意: 问一个区间内的数字满足能被13整除,且含有子序列13的数字的个数。 采用数位DP, 记录状态dp[pos][sum][statue]表示当前为pos位,前面求和mod13的值为sum,statue状态下的答案。 其中statue==0表示上一位不是1,statue==1表示上一位是1, statue==2表示前面已经出现过13序列了。#include<bits/stdc++.h>usi原创 2017-08-12 13:51:34 · 321 阅读 · 0 评论 -
Balanced Number [数位DP]
题意:一个数字是Balanced number当且仅当存在一个位置loc,使得一个数字的pos位置上的数字dig_pos*(pos-loc)的和是0。 询问区间内有多少这样的数字。 采用数位DP的方法,对于每一个位置,保存状态dp[pos][loc][sum]表示当前位pos位,中心位置为loc,前面的累加和为sum的状态的答案。 执行call()函数的时候,对于一个区间,loc从1到len遍原创 2017-08-12 13:46:15 · 362 阅读 · 0 评论 -
Round Numbers[数位DP][二进制]
题意:确定一个给定区间内二进制0不少于1的数字的个数。 区间范围较大。 首先确定用数位DP,不再是十进制DP,采用二进制数DP。记忆化搜索记录状态dp[pos][num0][num1]表示当前位pos位,之前有num0个二进制0,有num1个二进制1的状态下的答案。 在搜索过程中,注意首位1的位置,如果首位1没有确定,那么前置0是不能计入统计的。//#include<bits/stdc++.h>原创 2017-08-12 13:34:55 · 515 阅读 · 0 评论 -
背包dp模板
鉴于很多背包模板写的自己觉得不太习惯,封装成了函数并且标注了使用方法#includeusing namespace std;int dp[1005];int w[1005], v[1005];//w表示物品重量, v表示物品价值int c[1005];// c表示多重背包每件物品的个数int m,n; //m表示背包容量, n表示物品种类void zeroonepack(int c原创 2017-04-26 21:59:25 · 507 阅读 · 0 评论 -
761C Dasha and Password[简单dp]
C. Dasha and Passwordtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputAfter overcoming the stairs Dasha cam原创 2017-02-14 10:12:35 · 404 阅读 · 0 评论 -
768D Jon and Orbs[概率dp]
D. Jon and Orbstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputJon Snow is on the lookout for some orbs re原创 2017-03-01 13:35:21 · 404 阅读 · 0 评论 -
Balancing Act [dfs][树dp]
题意:一个树上删掉一个点,使得得到的森林中的最大数的size作为结果,最小化这个结果。 思路:删掉当前节点,得到的最大的树的大小就是dfs序中它所有的儿子的大小和他父树中的大小的最大值。 一遍dfs即可得到sz[]#include<iostream>#include<string>#include<cstdio>#include<cstring>#include<bitset>#incl原创 2017-08-26 16:05:27 · 320 阅读 · 0 评论