为甚是二十分!?!明明用了高进度。

P1255 数楼梯

wyp20130701 @ 2024-07-22 12:17:39

#include <iostream>
using namespace std;
short f[5005][5500];
inline void jia(int p1,int p2,int p3)
{
    short x = 0,len = 0;
    for (int i = 1;i <= 5499;i++)
    {
        f[p3][i] = f[p1][i] + f[p2][i] + x;
        x = f[p3][i] / 10;
        f[p3][i] %= 10;
        len++;
    }
    f[p3][len] = x;
    return ;
}
inline void print(int n,int pos)
{
    for (int i = 1;i <= pos;i++)
    {
        cout << f[n][i];
    }
    return ;
}
int main()
{
    f[1][1] = 1;
    f[2][1] = 2;
    int n;
    cin >> n;
    for (int i = 3;i <= n;i++)
    {
        jia(i - 1,i - 2,i);
    }
    short pos = 5499;
    while (f[n][pos] == 0)
    {
        pos--;
    }
    print(n,pos);
    return 0;
}//f[x][y]表示数列第x项高精度第y位。

by lyc_qwq @ 2024-07-22 12:39:40

这是我的代码(才不会告诉你我看不懂你的代码

#include<bits/stdc++.h>
using namespace std;
int a[5100],b[5100],c[5100];
int main(){
    int n;
    cin>>n;
    int la=1,lb=1,lc=1;
    a[1]=1;
    b[1]=2;
    if(n==1){
        cout<<1;
        return 0;
    }
    if(n==2){
        cout<<2;
        return 0;
    }
    for(int i=3;i<=n;i++){
        int  x=0;
        for(int j=1;j<=lc;j++){
            c[j]=a[j]+b[j]+x;
            x=c[j]/10;
            c[j]%=10;
        }
        if(x>0)
            c[++lc]=x;
        la=lb;
        for(int j=1;j<=la;j++)
            a[j]=b[j];
        lb=lc;
        for(int j=1;j<=lb;j++)
            b[j]=c[j];
    }
    for(int i=lc;i>=1;i--)
        cout<<c[i];
    return 0;
}

by _buzhidao_ @ 2024-07-22 12:55:37

@wyp20130701 这题是斐波那契数列,不用DP。


by poor_OIer @ 2024-07-23 16:41:36

@wyp20130701 一维数组不就够了吗,你在干什么?

#include<bits/stdc++.h>
using namespace std;
int n;
string f[5005];
string add(string a,string b)
{
    string c="";
    int len1=a.size(),len2=b.size();
    if(len1<len2)
        for(int i=1;i<=len2-len1;i++)
            a="0"+a;
    if(len1>len2)
        for(int i=1;i<=len1-len2;i++)
            b="0"+b;
    len1=a.size();
    int temp=0,jw=0;
    for(int i=len1-1;i>=0;i--)
    {
        temp=a[i]-'0'+b[i]-'0'+jw;
        jw=temp/10;
        temp%=10;
        c+=(char)(temp+'0');
    }
    if(jw)
        c+=(char)(jw+'0');
    reverse(c.begin(),c.end());
    return c;
}
int main()
{
    cin>>n;
    f[1]="1";
    f[2]="2";
    for(int i=3;i<=n;i++)
    {
        f[i]=add(f[i-1],f[i-2]);
    }
    cout<<f[n];
    return 0;
}

by yi105011 @ 2024-08-06 15:44:33

不是,你输出的时候输反了。


by yi105011 @ 2024-08-06 15:47:26

inline void print中的

for (int i = 1;i <= pos;i++)
    {
        cout << f[n][i];
    }

应改为

for (int i = pos;i >= 1;i++)
    {
        cout << f[n][i];
    }

就AC啦


by yi105011 @ 2024-08-06 15:49:02

记录详情


by yi105011 @ 2024-08-06 15:49:23

另:求关


by yi105011 @ 2024-08-06 15:50:43

对不起,刚刚代码中的i++得改为i--


by Allen20 @ 2024-08-17 11:08:41

我也20,哈哈


by Allen20 @ 2024-08-17 11:09:19

@wyp20130701


| 下一页