![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
summer training
Qer_
这个作者很懒,什么都没留下…
展开
-
HDU6044 Limited Permutation[快速输入][分治]
题意:给定ii从1到n个区间左右端点,描述的第i个区间的最小值必须是第i个数字,问从1~n有多少种符合题意的排列。 题目提示输入使用快速的fread() 对于一个确定的区间li,ril_i, r_i,其中pip_i是其最小值为定数,其余的可能情况就可以按照组合数去组合放到两边,所以从1~n大区间开始分治,对于每个区间,使用stl::map记录区间的编号ii。 对于用到的组合数结果,使用卢卡斯预原创 2017-08-17 19:18:16 · 351 阅读 · 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 评论 -
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 评论 -
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 评论 -
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 评论 -
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 评论 -
HDU5972Regular Number [shiftand][字符串]
题意:给定n个集合,每个集合中有一些数字,问给出的一个长数字串中的所有匹配。 匹配:如果连续n个数字分别出现在1~n这些集合中,则是一个成功的匹配。 考虑每个数字出现的集合,用十个01二进制表示0~9这十个数字出现在那些集合中(预处理占位),然后通过左移操作和与运算验证是否匹配到n位。 使用bitset更方便操作。#include<bits/stdc++.h>using namespace s原创 2017-08-17 21:36:00 · 297 阅读 · 0 评论