当智加科技的无人驾驶车队首次进行横跨美洲的生鲜运输时,工程师阳阳注视着一桶桶的黄油陷入了沉思。他突发奇想,要这一切都是标准化包装物件,那么其尺寸不仅节约控件、提升干线物流运输效率,同时也让简化车辆的动力学、运动学建模,帮助自动驾驶算法更精准、灵敏地操控车辆(但愿如此)。
如果现有两种包装物品的包装运输箱,尺寸分别是长宽 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])
from functools import * @lru_cache(maxsize=None) def func(n): if n==1&nbs***bsp;n==0: return 1 else: return func(n-1)+func(n-2) x=int(input()) print(func(x))
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; }