#30824: TLE 求解


buanyz03 (張晁瑋)

學校 : 新北市立板橋高級中學
編號 : 2629
來源 : [114.25.190.198]
最後登入時間 :
2023-09-06 15:43:50
d621. 兔子跳鈴鐺 -- leopan0922david942j | From: [27.53.176.226] | 發表日期 : 2022-06-14 15:41

#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>
using namespace std;
vector <string> v;
int n;
void dfs(int cur_sum,int k,string s)
{
    string temp;
    if(cur_sum == n)
    {
        v.push_back(s);
        return;
    }
    if(cur_sum>n)
    {
        return;
    }
    temp = s + " + " + to_string(k+1);
    dfs(cur_sum+k+1,k+1,temp);

    temp = s + " * 2";
    dfs(cur_sum * 2,k,temp);
}
int main()
{
    cin.sync_with_stdio(false), cin.tie(0);
    while(cin>>n)
    {
       if(n==0)
       {
           break;
       }
       v.clear();
       dfs(1,1,"1");
       if(v.size() == 0)
       {
          cout<<"cheat!"<<endl;
       }
       for(int i=0;i<v.size();++i)
       {
           cout<<v[i]<<endl;
       }
    }
}

 
#30832: Re: TLE 求解


asnewchien@gmail.com (david)

學校 : 不指定學校
編號 : 68108
來源 : [122.117.95.179]
最後登入時間 :
2024-11-04 20:21:51
d621. 兔子跳鈴鐺 -- leopan0922david942j | From: [125.224.132.229] | 發表日期 : 2022-06-15 08:47

這題可以只遞迴一次,建表,後面查表。

 

 
#30848: Re: TLE 求解


buanyz03 (張晁瑋)

學校 : 新北市立板橋高級中學
編號 : 2629
來源 : [114.25.190.198]
最後登入時間 :
2023-09-06 15:43:50
d621. 兔子跳鈴鐺 -- leopan0922david942j | From: [27.53.176.226] | 發表日期 : 2022-06-16 09:24

這題可以只遞迴一次,建表,後面查表。

 

 

#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>
using namespace std;
vector <string> v[401];
int n;
void dfs(int cur_sum,int k,string s)
{
    string temp;
    if(cur_sum>400)
    {
        return;
    }
    v[cur_sum].push_back(s);

    temp = s + " + " + to_string(k+1);
    dfs(cur_sum+k+1,k+1,temp);

    temp = s + " * 2";
    dfs(cur_sum*2,k,temp);
}

int main()
{
    cin.sync_with_stdio(false), cin.tie(0);
    for(int i=1;i<=400;++i)
    {
        v[i].clear();
    }
    dfs(0,1,"");
    while(cin>>n)
    {
       if(n==0)
       {
           break;
       }

       if(v[n].size() == 0)
       {
          cout<<"cheat!"<<endl;
       }
       for(int i=0;i<v[n].size();++i)
       {
           cout<<v[n][i]<<endl;
       }
    }
}

只遞迴一次會爆掉
有沒有參考程式碼

 
#30849: Re: TLE 求解


asnewchien@gmail.com (david)

學校 : 不指定學校
編號 : 68108
來源 : [122.117.95.179]
最後登入時間 :
2024-11-04 20:21:51
d621. 兔子跳鈴鐺 -- leopan0922david942j | From: [125.224.132.229] | 發表日期 : 2022-06-16 11:23

string d[401] = {""};

void dv(string v, int rv, int nxt)
{
    if(rv > 400) return;
    d[rv] = d[rv].append(v).append("\n");
    if(rv+nxt <= 400) dv(v + " + " + to_string(nxt), rv+nxt, nxt + 1);
    if(rv*2 <= 400) dv(v + " * 2", rv*2, nxt);
}

dv("1", 1, 2);

 

 

 
#30865: Re: TLE 求解


buanyz03 (張晁瑋)

學校 : 新北市立板橋高級中學
編號 : 2629
來源 : [114.25.190.198]
最後登入時間 :
2023-09-06 15:43:50
d621. 兔子跳鈴鐺 -- leopan0922david942j | From: [27.240.200.72] | 發表日期 : 2022-06-17 09:46

string d[401] = {""};

void dv(string v, int rv, int nxt)
{
    if(rv > 400) return;
    d[rv] = d[rv].append(v).append("\n");
    if(rv+nxt <= 400) dv(v + " + " + to_string(nxt), rv+nxt, nxt + 1);
    if(rv*2 <= 400) dv(v + " * 2", rv*2, nxt);
}

dv("1", 1, 2);

 

真的非常謝謝大神指導



 
ZeroJudge Forum