#include <bits/stdc++.h>
using namespace std;
long long f(long long a);
int main(void){
ios_base::sync_with_stdio(false);
cin.tie(0);
long long n;
while(cin>>n){
cout<<f(n)<<endl;
}
return 0;
}
long long f(long long a){
if(a>2)
return f(a-1)+f(a-2);
else if(a==2)
return 3;
else
return 1;
}
如何處理TLE 謝謝
#include <bits/stdc++.h>
using namespace std;
long long f(long long a);
int main(void){
ios_base::sync_with_stdio(false);
cin.tie(0);
long long n;
while(cin>>n){
cout<<f(n)<<endl;
}
return 0;
}
long long f(long long a){
if(a>2)
return f(a-1)+f(a-2);
else if(a==2)
return 3;
else
return 1;
}
如何處理TLE 謝謝
建表
#include <bits/stdc++.h>
using namespace std;
long long f(long long a);
int main(void){
ios_base::sync_with_stdio(false);
cin.tie(0);
long long n;
while(cin>>n){
cout<<f(n)<<endl;
}
return 0;
}
long long f(long long a){
if(a>2)
return f(a-1)+f(a-2);
else if(a==2)
return 3;
else
return 1;
}
如何處理TLE 謝謝
建表
這樣不是要很久嗎
#include <bits/stdc++.h>
using namespace std;
long long f(long long a);
int main(void){
ios_base::sync_with_stdio(false);
cin.tie(0);
long long n;
while(cin>>n){
cout<<f(n)<<endl;
}
return 0;
}
long long f(long long a){
if(a>2)
return f(a-1)+f(a-2);
else if(a==2)
return 3;
else
return 1;
}
如何處理TLE 謝謝
建表
這樣不是要很久嗎
你用遞迴才更慢 查f(40)時會一直重複呼叫f(1)、f(2)
直接建表1~40而已沒有多慢
#include <bits/stdc++.h>
using namespace std;
long long f(long long a);
int main(void){
ios_base::sync_with_stdio(false);
cin.tie(0);
long long n;
while(cin>>n){
cout<<f(n)<<endl;
}
return 0;
}
long long f(long long a){
if(a>2)
return f(a-1)+f(a-2);
else if(a==2)
return 3;
else
return 1;
}
如何處理TLE 謝謝
建表
這樣不是要很久嗎
你用遞迴才更慢 查f(40)時會一直重複呼叫f(1)、f(2)直接建表1~40而已沒有多慢
#include <stdio.h>
#include <stdlib.h>
int n;
int fibo[50];
int main(void) {
scanf("%d", &n);
fibo[0] = 1, fibo[1] = 3;
for(int i = 2; i < n; i++) {
fibo[i] = fibo[i - 1] + fibo[i - 2];
}
printf("%d\n", fibo[n - 1]);
return 0;
}
動態規劃的理念
#include <bits/stdc++.h>
using namespace std;
long long f(long long a);
int main(void){
ios_base::sync_with_stdio(false);
cin.tie(0);
long long n;
while(cin>>n){
cout<<f(n)<<endl;
}
return 0;
}
long long f(long long a){
if(a>2)
return f(a-1)+f(a-2);
else if(a==2)
return 3;
else
return 1;
}
如何處理TLE 謝謝
建表
這樣不是要很久嗎
你用遞迴才更慢 查f(40)時會一直重複呼叫f(1)、f(2)直接建表1~40而已沒有多慢
#include #include int n; int fibo[50]; int main(void) { scanf("%d", &n); fibo[0] = 1, fibo[1] = 3; for(int i = 2; i < n; i++) { fibo[i] = fibo[i - 1] + fibo[i - 2]; } printf("%d\n", fibo[n - 1]); return 0; }
動態規劃的理念
遞迴為什麼不行?
我才AC (2ms, 332KB)
#include <bits/stdc++.h>
using namespace std;
long long f(long long a);
int main(void){
ios_base::sync_with_stdio(false);
cin.tie(0);
long long n;
while(cin>>n){
cout<<f(n)<<endl;
}
return 0;
}
long long f(long long a){
if(a>2)
return f(a-1)+f(a-2);
else if(a==2)
return 3;
else
return 1;
}
如何處理TLE 謝謝
建表
這樣不是要很久嗎
你用遞迴才更慢 查f(40)時會一直重複呼叫f(1)、f(2)直接建表1~40而已沒有多慢
#include #include int n; int fibo[50]; int main(void) { scanf("%d", &n); fibo[0] = 1, fibo[1] = 3; for(int i = 2; i < n; i++) { fibo[i] = fibo[i - 1] + fibo[i - 2]; } printf("%d\n", fibo[n - 1]); return 0; }
動態規劃的理念
遞迴為什麼不行?
我才AC (2ms, 332KB)
長這樣
#include <bits/stdc++.h>
using namespace std;
long long f(long long a);
int main(void){
ios_base::sync_with_stdio(false);
cin.tie(0);
long long n;
while(cin>>n){
cout<<f(n)<<endl;
}
return 0;
}
long long f(long long a){
if(a>2)
return f(a-1)+f(a-2);
else if(a==2)
return 3;
else
return 1;
}
如何處理TLE 謝謝
建表
這樣不是要很久嗎
你用遞迴才更慢 查f(40)時會一直重複呼叫f(1)、f(2)直接建表1~40而已沒有多慢
#include #include int n; int fibo[50]; int main(void) { scanf("%d", &n); fibo[0] = 1, fibo[1] = 3; for(int i = 2; i < n; i++) { fibo[i] = fibo[i - 1] + fibo[i - 2]; } printf("%d\n", fibo[n - 1]); return 0; }
動態規劃的理念
遞迴為什麼不行?
我才AC (2ms, 332KB)
長這樣
#include <iostream>#include <cstdlib>using namespace std;inline int dihuei(int a, int b, int c) //b=1 c=3{if (a == 1 && b == 1)return 1;if (a == 2 && c == 3)return 3;if (a > 2){int x;x = b + c;return dihuei(a - 1, c, x);}elsereturn c;}int main(){int a;cin >> a;cout << dihuei(a, 1, 3) << "\n";system("pause");return 0;}
應該是你重複算的東西太多了
你的話會長這樣
f(2)
f(3)
f(4) f(1)
f(2)
f(5)
f(2)
f(3)
f(1)
#include <bits/stdc++.h>
using namespace std;
long long f(long long a);
int main(void){
ios_base::sync_with_stdio(false);
cin.tie(0);
long long n;
while(cin>>n){
cout<<f(n)<<endl;
}
return 0;
}
long long f(long long a){
if(a>2)
return f(a-1)+f(a-2);
else if(a==2)
return 3;
else
return 1;
}
如何處理TLE 謝謝
建表
這樣不是要很久嗎
你用遞迴才更慢 查f(40)時會一直重複呼叫f(1)、f(2)直接建表1~40而已沒有多慢
#include #include int n; int fibo[50]; int main(void) { scanf("%d", &n); fibo[0] = 1, fibo[1] = 3; for(int i = 2; i < n; i++) { fibo[i] = fibo[i - 1] + fibo[i - 2]; } printf("%d\n", fibo[n - 1]); return 0; }
動態規劃的理念
遞迴為什麼不行?
我才AC (2ms, 332KB)
長這樣
#include <iostream>#include <cstdlib>using namespace std;inline int dihuei(int a, int b, int c) //b=1 c=3{if (a == 1 && b == 1)return 1;if (a == 2 && c == 3)return 3;if (a > 2){int x;x = b + c;return dihuei(a - 1, c, x);}elsereturn c;}int main(){int a;cin >> a;cout << dihuei(a, 1, 3) << "\n";system("pause");return 0;}應該是你重複算的東西太多了
你的話會長這樣
f(2)
f(3)
f(4) f(1)
f(2)
f(5)
f(2)
f(3)
f(1)
如此一來又會變成另一題的遞迴
f(3)=2 f(4)=3 f(5)=f(3)+f(4).......
f(n)=f(n-1)+f(n-2)