第2题:母牛生小牛

news/2024/11/17 10:00:25/

第2题:母牛生小牛

这一题呢,我用了许多种尝试,刚开始用了递归暴力模拟,我想大家都能看懂。

#include <bits/stdc++.h>
using namespace std;
unsigned long long n;
unsigned long long ss(unsigned long long x){unsigned long long y=x+3;unsigned long long ans=1;if(y<=n)ans+=ss(y);for(unsigned long long i=y+2;i<=n;i+=2)ans+=ss(i);return ans;
}
int main(){cin>>n;cout<<ss(0);return 0;
}

40分

后面几个点都TLE了

只有unsigned long long呢,它可以将long long负数存储的那些空间全部挪到存正数的空间里来。

我加了个记忆化,然后提交

#include <bits/stdc++.h>
using namespace std;
unsigned long long n,sum[1010];
unsigned long long ss(unsigned long long x){if(sum[x]!=0)return sum[x];unsigned long long y=x+3;unsigned long long ans=1;if(y<=n)ans+=ss(y);for(unsigned long long i=y+2;i<=n;i+=2)ans+=ss(i);sum[x]=ans;return ans;
}
int main(){cin>>n;cout<<ss(0);return 0;
}

60分

后面几个点都WA了

这很明显,能推出状态转移方程,于是,我推了,还加了个高精。

我的状态表示是f[i]表示在第i年出生的小牛,到第n年,总共会创造有多少头奶牛,包括他本生。

#include <bits/stdc++.h>
using namespace std;
string dp[1010];
int x[510],y[510];
string jf(string a,string b){memset(x,0,sizeof(x));memset(y,0,sizeof(y));if(a.size()<b.size())swap(a,b);int c=-1,l1,l2,d=-1;for(int i=a.size()-1;i>=0;i--){c++;x[c]=a[i]-48; }l1=a.size();for(int i=b.size()-1;i>=0;i--){d++;y[d]=b[i]-48; }l2=b.size();for(int i=0;i<l1;i++){y[i]+=x[i];y[i+1]+=y[i]/10;y[i]%=10;}string s="";if(y[l1]!=0)s+=to_string(y[l1]);for(int i=l1-1;i>=0;i--)s+=to_string(y[i]);return s;
}
int main(){int n;cin>>n;for(int i=n;i>=0;i--){int y=i+3;dp[i]='1';for(int j=y;j<=n;j+=2)dp[i]=jf(dp[i],dp[j]);}cout<<dp[0];return 0;
}

代码出来了,80分,最后2个点TLE了

很显然,状态状态转移方程太复杂。

我们来列个表看看。

123456789
112234579

咦,好像有什么规律呢!

从第4项开始,每项都是前2项和前3项的和,哇!

#include <bits/stdc++.h>
using namespace std;
string dp[1010];
int x[510],y[510];
string jf(string a,string b){memset(x,0,sizeof(x));memset(y,0,sizeof(y));if(a.size()<b.size())swap(a,b);int c=-1,l1,l2,d=-1;for(int i=a.size()-1;i>=0;i--){c++;x[c]=a[i]-48; }l1=a.size();for(int i=b.size()-1;i>=0;i--){d++;y[d]=b[i]-48; }l2=b.size();for(int i=0;i<l1;i++){y[i]+=x[i];y[i+1]+=y[i]/10;y[i]%=10;}string s="";if(y[l1]!=0)s+=to_string(y[l1]);for(int i=l1-1;i>=0;i--)s+=to_string(y[i]);return s;
}
int main(){int n;cin>>n;dp[1]='1';dp[2]='1';dp[3]='2';for(int i=4;i<=n;i++)dp[i]=jf(dp[i-2],dp[i-3]);cout<<dp[n];return 0;
}

这就是AC代码


http://www.ppmy.cn/news/502212.html

相关文章

HDU 2010 水仙花数

水仙花数 Problem Description 春天是鲜花的季节&#xff0c;水仙花就是其中最迷人的代表&#xff0c;数学上有个水仙花数&#xff0c;他是这样定义的&#xff1a; “水仙花数”是指一个三位数&#xff0c;它的各位数字的立方和等于其本身&#xff0c;比如&#xff1a;1531353…

小牛485通讯原理_让你秒懂智能电表工作原理及抄表原理

一、智能电表的工作原理 1.智能电表主要是由电子元器件构成&#xff0c;其工作原理是先通过对用户供电电压和电流的实时采样&#xff0c;再采用专用的电能表集成电路&#xff0c;对采样电压和电流信号进行处理&#xff0c;并转换成与电能成正比的脉冲输出&#xff0c;最后通过单…

小牛n1s调转向灯声音_小牛N1/N1S改装全防护压力轴承,彻底解决方向柱下轴承进沙问题...

小牛电动车下轴承进沙问题好像是个很普遍的现象,或许小牛电动车的设计者在大城市待习惯了不知道我们这些小城市的人的疾苦吧。闲话少说,先分析下小牛电动车为啥容易进沙子吧!首先我们看下这个图。轴承的宽度远大于方向柱底盘的宽度,在箭头处可以看清晰的看到这个轴承硕大的…

递推算法3——顺推法之母牛生小牛问题

有一头母牛&#xff0c;每年年初生一头小母牛&#xff0c;每头小母牛从第3个年头起每年年初也可以生一头小母牛。求在第20年时有多少头母牛。 令x0_i&#xff0c;x1_i&#xff0c;x2_i&#xff0c;x3_i分别表示第i年后刚生下的母牛、满1岁的母牛、满2岁的母牛以及可生小母牛的…

生小牛问题

生小牛问题 题目描述 有一头牛&#xff0c;从第四年开始每一年生一头小牛&#xff0c;到第九年死亡&#xff0c;试问20年之后有多少头牛&#xff1f; #include<iostream> #include<malloc.h> #include<vector> using namespace std; int main() {int S;in…

递归算法10——复杂递归之大牛生小牛问题

一只刚出生的小牛&#xff0c;4年后生一只小牛&#xff0c;以后每年生一只&#xff0c;现有一只刚出生的小牛&#xff0c;问20年后共有多少只。 【分析】 问题可以分成两种情况处理&#xff1a;小于4年时&#xff0c;只有一只小牛&#xff1b;大于4年时&#xff0c;小牛长成大…

数据仓库 Hive 从入门到小牛(一)

目录 一、数据仓库的介绍1.1 数据仓库的基本概念1.2 数据仓库的主要特征1.3 数据仓库与数据库区别1.4 数据仓库分层架构1.5 数据仓库之 ETL二、Hive 简介2.1 什么是 Hive?2.2 为什么使用 Hive?2.3 Hive 的体系结构2.4 Hive 与关系型数据库区别三、Hive 的安装四、Hive 的交互…

消息队列之Kafka从入门到小牛

目录 一、Kafka 介绍1.1 消息队列的介绍1.2 Kafka 简介1.3 安装 Kafka 集群二、Kafka 使用初体验三、Kafka 核心扩展内容3.1 Broker 扩展3.2 Producer 扩展3.3 Consumer 扩展3.4 Kafka 核心之存储和容错机制3.5 Kafka 高效读写数据3.6 Zookeeper 在 Kafka 中的作用3.7 Kafka 事…