<每日一题> Day6:HDU递推专题完结
这是我自己Clone的专题,A,B题解昨天发过了
C:参考代码:
/*
很容易我们可以手推出n = 1, 2, 3时的情况,我们假设前n - 1
列已经放好,方法有dp[n - 1]种,第n列很显然有1种方法,那我
再假设前n - 2列已经放好,方法有dp[n - 2]种,此时我们知道
第n - 1和第n列肯定是横着放的,如果他们竖着放就和前n - 1列
放好的情况相同,所以我们可以推出方程dp[n] = dp[n - 1] + dp[n - 2];
*/
#include <cstdio>
using namespace std; typedef long long int ll;
const int maxn = + ;
int n;
ll dp[maxn]; int main() {
dp[] = ;
dp[] = ;
dp[] = ;
for(int i = ; i <= maxn; i ++) {
dp[i] = dp[i - ] + dp[i - ];
}
while(~scanf("%d", &n)) {
printf("%lld\n", dp[n]);
}
return ;
}
D:参考代码:
/*
解题思路:还是一如既往的递推...这个题和涂格子的那个题目很像
很容易我们可以手推出n = 1, 2, 3的情况,对于第n个格子,我
们假设前n - 1个格子已经涂好了,那么我们知道如果第n - 1个格子
是O,那么我们第n个格子有两种涂法,如果不是O,我们第n个格子有
三种涂法,对于第n - 1个格子,我们可以看第n - 2个格子,如果
第n - 2个格子
*/
#include <cstdio>
using namespace std; typedef long long int ll;
const int maxn = + ;
int n;
ll dp[maxn]; int main() {
dp[] = ;
dp[] = ;
dp[] = ;
for(int i = ; i <= maxn; i ++) {
dp[i] = * (dp[i - ] + dp[i - ]);
}
while(~scanf("%d", &n)) {
printf("%lld\n", dp[n]);
}
return ;
}
E:参考代码:
/*
同样是递推,手推出n = 2, 3时所有未中奖的情况,我们先把
他们抽奖假设为放东西,那么第n个参与者放东西时它可以放到
任意一个前面的位置即n - 1种方法,我们假设为k为n放置的坐
标,那么我们还需要将第k个放到其它位置,我们知道当第k个放
到第n个位置时,其它n - 2个有dp[n - 2]种方法,当第k个不放
到第n个位置时,这n - 1个有dp[n - 1]种方法放置,所以我们
可以得出dp[n] = (n - 1) * (dp[n - 1] + dp[n - 2])。
*/
#include <cstdio>
using namespace std; typedef long long int ll;
const int maxn = + ;
int c, n;
ll dp[maxn];
ll mather[maxn]; int main() {
dp[] = ;
dp[] = ;
mather[] = ;
mather[] = ;
for(int i = ; i <= maxn; i ++) {
dp[i] = (i - ) * (dp[i - ] + dp[i - ]);
mather[i] = mather[i - ] * i;
}
scanf("%d", &c);
while(c --) {
scanf("%d", &n);
printf("%.2f%%\n", ((double)dp[n] * ) / mather[n]);
}
return ;
}
F:参考代码:
/*
这个题可能是上一题的加强版?
上一题是说n个人全为选中正确的百分比,这题是求n个里有m个全
未选中的种数,高中同学应该都能想到选出m个让他们全不合格就行,
C(n, m) * dp[m]即为方程了。
*/
#include <cstdio>
using namespace std; typedef long long int ll;
const int maxn = + ;
int c, n, m;
ll dp[maxn], mather[maxn]; int main() {
dp[] = ;
dp[] = ;
for(int i = ; i <= maxn; i ++)
dp[i] = (i - ) * (dp[i - ] + dp[i - ]);
scanf("%d", &c);
while(c --) {
scanf("%d %d", &n, &m);
ll p = ;
for(int i = n - m + ; i <= n; i ++)
p *= i;
for(int i = ; i <= m; i ++)
p /= i;
printf("%lld\n", p * dp[m]);
}
return ;
}
G:参考代码:
/*
这题一开始没有思路emm,去网上查了一下发现受益匪浅。
参考直线相交,我们发现每增加一条直线就会增加n - 1个交点,
就会增加n个平面,所以我们知道对于直线相交产生的平面个数有
dp[n] = dp[n - 1] + n; 对于折线呢,我们发现,每画一条折线我们总是能和之前的n - 1
条折线多出4个交点,即总共多出4 * (n - 1) 个交点,那么就多出了
4 * (n - 1) + 1个面,就可以得出递推方程dp[n] = dp[n - 1] + 4 * [n - 1] + 1 对于Z型折线,画一画就可以知道每增加一条z型折线,最多能与原图的n - 1条z型折线
共多生成9 * (n - 1) 个交点,也即可以得到递推方程为
dp[n] = dp[n - 1] + 9 * (n - 1) + 1;
*/
#include <cstdio>
using namespace std; typedef long long int ll;
const int maxn = + ;
int c, n;
ll dp[maxn]; int main() {
dp[] = ;
for(int i = ; i <= maxn; i ++) {
dp[i] = dp[i - ] + * (i - ) + ;
}
scanf("%d" ,&c);
while(c --) {
scanf("%d", &n);
printf("%lld\n", dp[n]);
}
return ;
}
<每日一题> Day6:HDU递推专题完结的更多相关文章
- [ 9.26 ]CF每日一题系列—— 771B递推问题
Description: 给定你命名的规律,1-10个字符,开头必须大写,最多有50个名字,然后告诉你有n个人,判断区间长度为k,那么你将得到n - k + 1个答案(YES or NO) 表示1 - ...
- HDOJ(HDU).2044-2049 递推专题
HDOJ(HDU).2044-2049 递推专题 点我挑战题目 HDU.2044 题意分析 先考虑递推关系:从1到第n个格子的时候由多少种走法? 如图,当n为下方格子的时候,由于只能向右走,所以有2中 ...
- hdu 2044-2050 递推专题
总结一下做递推题的经验,一般都开成long long (别看项数少,随便就超了) 一般从第 i 项开始推其与前面项的关系(动态规划也是这样),而不是从第i 项推其与后面的项的关系. hdu2044:h ...
- 【第53套模拟题】【递推】【RMQ】【二进制】【分块】
题目:(开始自己描述题目了...) 第一题大意: 求1~n的所有排列中逆序对为k个的方案数,输出方案数%10000,n<=1000. 解:这道题一个递推,因为我基本上没怎么自己做过递推,所以推了 ...
- HDU-1041-Computer Transformation,大数递推,水过~~
Computer Transformatio ...
- ARC077C pushpush 递推
---题面--- 题解: 貌似一般c题都是递推... 观察到最后一个插入的数一定在第一个,倒数第二个插入的数一定在倒数第一个,倒数第三个插入的数一定在第2个,倒数第四个插入的数一定在倒数第2个…… O ...
- hdu 1465:不容易系列之一(递推入门题)
不容易系列之一 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- [ 9.24 ]CF每日一题系列—— 468A构造递推
Description: 1 - n个数问你能否经过加减乘除这些运算n -1次的操作得到24 Solutrion: 一开始想暴力递推,发现n的范围太大直接否决,也否决了我的跑dfs,后来就像肯定有个递 ...
- 【(好题)组合数+Lucas定理+公式递推(lowbit+滚动数组)+打表找规律】2017多校训练七 HDU 6129 Just do it
http://acm.hdu.edu.cn/showproblem.php?pid=6129 [题意] 对于一个长度为n的序列a,我们可以计算b[i]=a1^a2^......^ai,这样得到序列b ...
随机推荐
- vecto容器中一些没有注意到的地方
vector容器 vectoor是一个单口容器. vector动态增长的基本原理 当插入新元素的时候,如果空间不足,那么vector会重新申请更大的一块内存空间,将原空间数据拷贝到新空间,释放旧空间的 ...
- django orm(2)
目录 聚合函数 分组查询 F与Q查询 F查询 Q查询 事务 Django中的事务 orm字段及参数 自定义char字段 聚合函数 这里的聚合函数和SQL里的聚合函数对应,在使用前需要先进行模块的导入: ...
- React Native 之createDrawerNavigator和createSwitchNavigator
其他代码接上篇文章 createDrawerNavigator 抽屉 createSwitchNavigator 模拟登录=>主界面 index.js /** * @format */ impo ...
- Activiti7入门(五)
1 创建流程 首先选中存放图形的目录(本次我们选择 resources 下的 bpmn 目录),点击菜单: New-BpmnFile,如下图所示: 起完名字 holiday 后(默认扩展名为 bpmn ...
- Python_016(面向对象之属性和类方法)
一.特性(property,setter,deleter) 1.属性:将一个方法伪装成一个属性,在代码级别上没有本质的提升,但是看起来更合理; class Person: def __init__(s ...
- 【PowerOJ1752&网络流24题】运输问题(费用流)
题意: 思路: [问题分析] 费用流问题. [建模方法] 把所有仓库看做二分图中顶点Xi,所有零售商店看做二分图中顶点Yi,建立附加源S汇T. 1.从S向每个Xi连一条容量为仓库中货物数量ai,费用为 ...
- idea创建项目和依赖
创建项目和依赖 项目搭建完成后打开web.xml可看到如图使用的是servlet2.3,但版本太老,servlet2.3 jsp 的el表达式不工作,所以我们需要切换新版本. 切换新版本方法:打开t ...
- Python 学习笔记(基础语法 restful 、 Flask 和 Requests)
input 函数 #!/usr/bin/env python3 name = input("\n\n按下 enter 键后退出.") print(name) print() 在 p ...
- java 线程池的创建方式
package com.nf147.Constroller; import java.util.concurrent.ExecutorService; import java.util.concurr ...
- (转)mnist.load_data()出现错误
解决方法:本地导入1.下载mnist.npz文件mnist.npz链接imdb.npz链接2.将上述文件放于合适位置(执行keras程序的python环境中),因为我用的是python虚拟环境,所以我 ...