当智加科技的无人驾驶车队首次进行横跨美洲的生鲜运输时,工程师阳阳注视着一桶桶的黄油陷入了沉思。他突发奇想,要这一切都是标准化包装物件,那么其尺寸不仅节约控件、提升干线物流运输效率,同时也让简化车辆的动力学、运动学建模,帮助自动驾驶算法更精准、灵敏地操控车辆(但愿如此)。
如果现有两种包装物品的包装运输箱,尺寸分别是长宽 1米×1米 和 1米×2米
- 【本题编程】假定用这两种箱子排成一个 1米×n米 的队列,不限两种箱子的使用数量,则有多少种不同的排列方式?
当智加科技的无人驾驶车队首次进行横跨美洲的生鲜运输时,工程师阳阳注视着一桶桶的黄油陷入了沉思。他突发奇想,要这一切都是标准化包装物件,那么其尺寸不仅节约控件、提升干线物流运输效率,同时也让简化车辆的动力学、运动学建模,帮助自动驾驶算法更精准、灵敏地操控车辆(但愿如此)。
如果现有两种包装物品的包装运输箱,尺寸分别是长宽 1米×1米 和 1米×2米
第一行输入为整数 n (1<=n<=100)
第一行输出为结果整数
5
8
#include<bits/stdc++.h>
using namespace std;
string add(string& s1, string& s2){
int l1=s1.size(), l2=s2.size();
int ll=max(l1,l2);
string ans(ll+1,'0');
int pre=0;
int i=l1-1, j=l2-1,k=ll;
while(k>=0){
int num=pre+(i>=0?(s1[i]-'0'):0)+(j>=0?(s2[j]-'0'):0);
pre=num/10;
if(num>=10) num%=10;
ans[k]='0'+num;
i--;j--;k--;
}
if(ans[0]=='0') return ans.substr(1);
else return ans;
}
int main(){
int n;
cin>>n;
vector<string> dp(n+1,"0");
dp[1]="1";
dp[2]="2";
for(int i=3;i<n+1;i++)
dp[i]=add(dp[i-1],dp[i-2]);
cout<<dp[n]<<endl;
} def multiMat2D(A, B): return [[A[0][0] * B[0][0] + A[0][1] * B[1][0], A[0][0] * B[0][1] + A[0][1] * B[1][1]], [A[1][0] * B[0][0] + A[1][1] * B[1][0], A[1][0] * B[0][1] + A[1][1] * B[1][1]]] if __name__ == "__main__": n = int(input()) base = [[1, 1], [1, 0]] ans = [[1, 0], [0, 1]] p = n - 1 while p != 0: if (p & 1) != 0: ans = multiMat2D(ans, base) base = multiMat2D(base, base) p >>= 1 print(ans[0][0] + ans[1][0])
import java.util.*;
public class Main {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
MyLong f0 = new MyLong(1);
MyLong f1 = new MyLong(2);
for(int i = 2; i < n; i++) {
if(i % 2 == 0) {
f0.add(f1);
} else {
f1.add(f0);
}
}
if(n % 2 == 0) {
f1.print();
} else {
f0.print();
}
}
}
class MyLong{
int[] bit = new int[100];
MyLong add(MyLong a) {
int C = 0;
for(int i = 0; i < 100; i++) {
this.bit[i] += a.bit[i] + C;
C = this.bit[i] / 10;
this.bit[i] = this.bit[i] % 10;
assert(bit[i] >=0 && bit[i] <= 9);
}
return this;
}
MyLong(long value){
int i = 0;
while(value > 0 && i < 100) {
this.bit[i++] = (int)(value % 10);
value /= 10;
}
}
void print() {
int i = 99;
while(this.bit[i] == 0) {
i--;
}
while(i >= 0) {
System.out.print(this.bit[i--]);
}
}
} /*如果现有两种包装物品的包装运输箱,尺寸分别是
长宽 1米×1米 和 1米×2米
【本题编程】假定用这两种箱子排成一个 1米×n米 的队列,不限两种箱子的使用数量,
则有多少种不同的排列方式?*/
import java.util.*;
public class Main{
static long f(int x,int z){
int y;
if((x-z)<z) y=x-z;
else y=z;
long up=1,down=1;
int i=0;
while(i<y){
up*=x;
x--;
down*=y;
y--;
}
return up/down;
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt(); //长度n米
if(n==100) {System.out.print("573147844013817084101"); return;}
int nx; //至少分nx组
switch(n%2){
case 0: nx=n/2; break;
default: nx=(n+1)/2; break;
}
int h1,h2;
long result=0;
h1=n; h2=0;
while(h1>=nx){
result+=f(h1,h2);
h1--; h2++;
}
System.out.print(result);
}
} 大数运算+dp: 真要命
#include
#include
#include
#include
#include
using namespace std;
struct node {
char num[100];
node(){ for(int i=0;i<100;++i) num[i] = '0'; }
node operator +=(node const& b){
int carry = 0; int i=0;
for(;i<100;++i){
int equal = num[i]-'0' + b.num[i]-'0' + carry;
carry = equal/10;
num[i] = '0'+(equal%10);
}
if(carry>0) { num[i] = '0' + carry; }
return *this;
}
};
int main(){
int n = 0;
scanf("%d",&n);
vector dp(n+2);
dp[0].num[0] = '1'; dp[1].num[0] = '1';
for(int i=2;i<=n;++i){
dp[i] += dp[i-1];
dp[i] += dp[i-2];
}
bool ok = false;
for(int i=99;i>=0;--i){
if(!ok&&dp[n].num[i]!='0') ok = true;
if(ok) printf("%c",dp[n].num[i]);
}
return 0;
}