1.14 日志(递推ybtoj)

明天要模拟,n年未碰电脑,先不学新的了。。。。

1.错排问题

dp最棒了
在这里插入图片描述
code:
#include
#include
#include
#include
#include
using namespace std;
const int M=INT_MAX;
long long f[25][25]={ };//f[i][j]表示有i个数,其中j个数可以随便填
int jc[22];
void solve(){
jc[1]=1;
for(int i=2;i<=20;i++){
jc[i]=jc[i-1] * i;
}

}
long long dp(int num,int a){
if(f[num][a]!=0) return f[num][a];
if(num==a) return jc[num];//都自由则转化为阶乘问题
long long res=0;
if(a!=0){
res += a * dp(num-1,a);
}//讨论不可自由填的那一位填什么
if(num>a+1){
res += (num-1-a) * dp(num-1,a+1);
}
f[num][a]=res;
return res;
}
int main(){
f[0][0]=1;
f[1][0]=0;
solve();//我这行一开始忘打了,结果调了半天。。。
int n;
scanf("%d",&n);
long long ans=dp(n,0);
printf("%lld",ans);
return 0;
}

2.奇怪的汉诺塔

在这里插入图片描述
与3塔的转换与取最小值是我没想到的。。。
#include
#include
#include
#include
#include
using namespace std;
const int M=INT_MAX;
int main(){
int f[15] = { };
int k[15] = { };
for(int i=1;i<=12;i++){
k[i]=M;
}
f[1]=1;
f[2]=3;
k[1]=1;
for(int i=3;i<=12;i++){
f[i] = 2 * f[i-1] + 1;
}
for(int i=2;i<=12;i++){
for(int j=1;j<=i;j++){
k[i] = min(k[i],2*k[j]+f[i-j]);
}
}
for(int i=1;i<=12;i++){
printf("%d\n",k[i]);
}
return 0;
}

数的划分

在这里插入图片描述
一遍AC针不戳(dp太香了)

#include
#include
#include
#include
#include
using namespace std;
const int M = INT_MAX;
int f[202][202][8] = {};
long long dp(int min, int left, int num) {
if (f[min][left][num] != 0)
return f[min][left][num];
if (num == 1)
return 1;
int res = 0;
for (int i = min; i <= left / num; i++) {
res += dp(i, left - i, num - 1);
}
return f[min][left][num] = res;
}
int main() {
int a, b;
scanf("%d%d", &a, &b);
printf("%lld", dp(1, a, b));
return 0;
}

4.传球游戏

在这里插入图片描述
一开始一直在讨论奇偶性和转圈上纠结。。。
#include
#include
#include
#include
#include
using namespace std;
const int M = INT_MAX;
int main() {
int m, n;
long long f[50][50];
scanf("%d%d", &n, &m);
f[0][1] = 1;
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (j == 1)
f[i][j] = f[i - 1][n] + f[i - 1][2];
else if (j == n)
f[i][j] = f[i - 1][n - 1] + f[i - 1][1];
else
f[i][j] = f[i - 1][j - 1] + f[i - 1][j + 1];
}
}
printf("%lld", f[m][1]);
return 0;
}

平铺方案

在这里插入图片描述
opj原题,直接水掉~~

#include
#include
#include
#include
using namespace std;
int ans[1001], x[300][1000];
int pus(int s1[], int s2[]) {
int i;
memset(ans, 0, sizeof(ans));
int l1 = 500;
while (s1[l1] == 0) l1–;
int l2 = 500;
while (s2[l2] == 0) l2–;
for (i = 0; i <= max(l1, l2); i++) {
ans[i] += s1[i] + s2[i];
if (ans[i] >= 10) {
ans[i] -= 10;
ans[i + 1] += 1;
}
}
int k = i + 5;
while (ans[k] == 0) k–;
return k;
}
void solve() {
for (int i = 0; i <= 300; i++) {
for (int j = 0; j <= 500; j++) {
x[i][j] = 0;
}
}
x[0][0] = 1;
x[1][0] = 1;
for (int i = 2; i <= 252; i++) {
if (i == 23) {
int o = 15;
}
if (i == 20) {
int l = 15;
}
int m = pus(x[i - 2], x[i - 1]);
for (int j = 0; j <= m; j++) {
x[i][j] = ans[j];
}
m = pus(x[i], x[i - 2]);
for (int j = 0; j <= m; j++) {
x[i][j] = ans[j];
}
}
}
int main() {
solve();
int p;
while (scanf("%d", &p) != EOF) {
int z = 500;
while (x[p][z] == 0) z–;
for (int i = z; i >= 0; i–) {
printf("%d", x[p][i]);
}
printf("\n");
}
return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客题霸 [买卖股票的最好时机] C++题解/答案

买卖股票的最好时机 题解&#xff1a; 设两个变量&#xff0c;一个为minn&#xff0c;一个为maxx 当遇到比当前minn还小的价钱时&#xff0c;就更新minn 当与minn大时&#xff0c;就计算如果这个价卖出&#xff0c;赚多少钱&#xff0c;maxx不断更新取最大值 这样&#xff0c…

P7600-[APIO2021]封闭道路【堆,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P7600 题目大意 给出nnn个点的一棵树&#xff0c;边有边权&#xff0c;对于每个kkk求去掉最小边权和的点使得每个点的度数都不超过kkk。 1≤n≤1051\leq n\leq 10^51≤n≤105 题目大意 APIO遇到的原题&#xff0c;和CF1119F…

codeforces1497 D. Geniue(dp+图论)

D. Geniue Frozen_Guardian题解 Implicit_总结 首先把此序列看作一个完全图&#xff0c;然后按照边权从小到大的顺序枚举边。 如何按照边权从小到大枚举边? 下面考虑形如边(a,b)(a,b)(a,b)都默认a<ba<ba<b。 任意考虑两条边(a,b)(a,b)(a,b)和(c,d)(c,d)(c,d)&…

1.16 模拟(排序)

# 总结 845分 我好菜啊qwq 第九题&#xff08;站队&#xff09;出了bug。。。 没有考虑到中位数会存在重叠错误问题&#xff08;直接卡掉5个点就离谱&#xff09; 后来发现其实第九题暴搜也能过。。。&#xff08;要是IOI赛制就能ak了&#xff09; 前面的水题不贴了 # 9.士兵站…

牛客题霸 [判断一个链表是否为回文结构] C++题解/答案

判断一个链表是否为回文结构 题目描述 给定一个链表&#xff0c;请判断该链表是否为回文结构。 题解&#xff1a; 直接将链表内的数据存入string中&#xff0c;然后从两端开始向中间判断即可 代码&#xff1a; /*** struct ListNode {* int val;* struct ListNode *next;…

HDU6736 F.Forest Program(dfs找环)

F.Forest Program 千摆渡题解 找环可以使用dfs一遍求出。 方法为&#xff1a;vis数组设置为三种状态&#xff0c;0表示未被访问过。1表示正在被访问&#xff0c;即边指向的结点是当前结点在dfs树上的祖先节点。2表示访问完毕。同时dfs的同时记录每一个结点的先驱pre。如果边访…

P7324-[WC2021]表达式求值【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P7324 题目大意 给一个只包含mmm个值的表达式&#xff0c;<<<表前后取最小值&#xff0c;>>>表前后取最大&#xff0c;???可以是小于也可以是大于。 然后nnn次给出这mmm个值&#xff0c;所有方案下表达…

平面分割 题解(1.16 递推模拟)

平面分割 代码一行&#xff0c;解析一箱~~ 解析 计f[i]&#xff1a;从1到i累加之和 先假设最好情况&#xff0c;p2&#xff1b; 此时第一条会增加1个 第二条与第一条相交&#xff0c;再加2个 第三条与前2条相交&#xff0c;再加3个 … 故n条时共增加f[n]个&#xff0c;共f[n]…

牛客题霸 [二叉树的最大深度]C++题解/答案

二叉树的最大深度 题目描述 求给定二叉树的最大深度&#xff0c; 最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。 题解&#xff1a; 众所周知&#xff0c;树有左子树和右子树&#xff0c;每向下一层&#xff0c;深度就1, 所以我们就不断递归&#xff0c;看…

AT1983-[AGC001E]BBQ Hard【dp,组合数学】

正题 题目链接:https://www.luogu.com.cn/problem/AT1983 题目大意 给出nnn个数对(ai,bi)(a_i,b_i)(ai​,bi​) 求 ∑i1n∑ji1n(aibiajbjaiaj)\sum_{i1}^n\sum_{ji1}^n\binom{a_ib_ia_jb_j}{a_ia_j}i1∑n​ji1∑n​(ai​aj​ai​bi​aj​bj​​) 1≤n≤2105,1≤ai,bi≤20001…

.NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了

本来这篇只是想简单介绍下ASP.NET Core MVC项目的&#xff08;毕竟要照顾到很多新手朋友&#xff09;&#xff0c;但是转念一想不如来点猛的&#xff08;考虑到急性子的朋友&#xff09;&#xff0c;让你通过本文的学习就能快速的入门ASP.NET Core。既然是快速入门所以过多过深…

codeforces1301 F. Super Jaber(多源bfs+枚举)

F. Super Jaber 最终答案的方案可以分为2种&#xff1a; 不使用传送&#xff0c;即曼哈顿距离。从起点S到最近&#xff08;步数最少&#xff09;的颜色为C的格子x&#xff0c;传送到离终点T最近的颜色也为c的格子y&#xff0c;再走到T&#xff08;从S到x以及y到T的过程中均使…

题解: 区间合并(opj 2-4-7620)

一开始轻视这道题了&#xff0c;想用各种各样奇怪的区间标记把这道题水掉&#xff0c;结果WA声一片。。&#xff08;我大意了&#xff0c;没有AC&#xff01;&#xff09; 后来大脑开始思考&#xff0c;贪心解决掉了&#xff0c;AC快乐~~&#xff08;忽略这道题来自分治…qwq&a…

牛客题霸 [二叉搜索树的第k个结点]C++题解/答案

牛客题霸 [二叉搜索树的第k个结点]C题解/答案 题目&#xff1a; 给定一棵二叉搜索树&#xff0c;请找出其中的第k小的结点。 题解&#xff1a; 二叉搜索树&#xff1a; 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空&#xf…

codeforces1303 F. Number of Components(并查集+添_正序、删_逆序)

F. Number of Components 并查集&#xff0c;每次修改考虑的是这个修改带来的贡献&#xff0c;就是和相邻颜色的对比&#xff0c;如果不考虑先不考虑颜色覆盖&#xff0c;那么添加颜色首先会产生一个新的连通块&#xff0c;然后考虑合并&#xff0c;每合并一次就会减少一个连通…

内部设计师揭秘!王者峡谷中竟有隐藏的c++代码??!!腾讯已经炸了!!!

解析 模拟的时候用关于n的一元二次方程实根公式解的不亦乐乎。。。后来经高人提醒才发现万物皆为斐波拉契。。 就很《离谱》 于是代码就不难了 也算有收获吧&#xff0c;遇到这种看起来莫名其妙的题时&#xff0c;不着急死磕&#xff0c;可以先写个上图一样的程序找找规律 “实…

.NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入

写在前面上篇文章我给大家讲解了ASP.NET Core的概念及为什么使用它&#xff0c;接着带着你一步一步的配置了.NET Core的开发环境并创建了一个ASP.NET Core的mvc项目&#xff0c;同时又通过一个实战教你如何在页面显示一个Content的列表。不知道你有没有跟着敲下代码&#xff0c…

P5305-[GXOI/GZOI2019]旧词【树链剖分,线段树】

正题 题目链接:https://www.luogu.com.cn/problem/P5305 题目大意 给一棵有根树和kkk&#xff0c;QQQ次询问给出x,yx,yx,y求 ∑i1xdepLCA(i,y)k\sum_{i1}^{x}dep_{LCA(i,y)}^ki1∑x​depLCA(i,y)k​ 1≤n,Q≤5105,1≤k≤1091\leq n,Q\leq 5\times 10^5,1\leq k\leq 10^91≤n,…

牛客题霸 [二叉树的镜像]C++题解/答案

牛客题霸 [二叉树的镜像]C题解/答案 题目描述 操作给定的二叉树&#xff0c;将其变换为源二叉树的镜像。 题解&#xff1a; 根据题也不难看出&#xff0c;二叉树的镜像定义其实就是左右树翻转 所以我们一直递归左子树&#xff0c;到头后递归右子树&#xff0c;开始翻转&…

2021牛客暑期多校训练营1 G-Game of Swapping Numbers(最优解转化+贪心)

G-Game of Swapping Numbers 讲题人做法 最优解转化&#xff1a; 考虑任意一个最优解&#xff0c;我们把交换后的数字重新放回原来的位置&#xff0c;相当于为每一个元素分配了它在答案中的符号。比如 A{0, 3}, B {1, 2}&#xff0c;最优解符号分配是 A{-0,3}, B{-1,2}。 …