More actions
No edit summary |
No edit summary |
||
| Line 4: | Line 4: | ||
* [https://www.acmicpc.net/problem/1003|피보나치 함수] | * [https://www.acmicpc.net/problem/1003|피보나치 함수] | ||
* [https://www.acmicpc.net/problem/1149|RGB거리] | * [https://www.acmicpc.net/problem/1149|RGB거리] | ||
* [https://www.acmicpc.net/problem/1912|연속합] | |||
= 참가자 = | = 참가자 = | ||
* 15이원준 | * 15이원준 | ||
Revision as of 15:39, 12 October 2016
오늘의 문제
참가자
- 15이원준
코드
15이원준
피보나치 함수
#include<iostream>
#include<utility>
using namespace std;
int arr[41][2] = { 0, };
pair<int,int> search(int num){
if(arr[num][0] + arr[num][1]){
return make_pair(arr[num][0], arr[num][1]);
}
pair<int,int> tmp1 = search(num-1);
pair<int,int> tmp2 = search(num-2);
arr[num][0] = tmp1.first + tmp2.first;
arr[num][1] = tmp1.second + tmp2.second;
return make_pair(arr[num][0], arr[num][1]);
}
int main(){
arr[0][0] = arr[1][1] = 1;
int T;
cin>>T;
while(T--){
int n;
cin>> n;
search(n);
printf("%d %d\n", arr[n][0],arr[n][1]);
}
}
RGB 거리
#include<iostream>
#include<algorithm>
using namespace std;
int arr[1001][3] = {0,};
int w[1001][3] = {0,};
int main(){
int n;
cin>>n;
for(int i = 0; i<n; i++){
for(int j = 0; j<3; j++){
scanf("%d", &w[i][j]);
}
}
arr[0][0] = w[0][0];
arr[0][1] = w[0][1];
arr[0][2] = w[0][2];
for(int i = 1; i<n; i++){
arr[i][0] = min(arr[i-1][1] + w[i][0], arr[i-1][2] + w[i][0]);
arr[i][1] = min(arr[i-1][0] + w[i][1], arr[i-1][2] + w[i][1]);
arr[i][2] = min(arr[i-1][0] + w[i][2], arr[i-1][1] + w[i][2]);
}
int tmp = min(arr[n-1][0],arr[n-1][1]);
tmp = min(tmp,arr[n-1][2]);
cout<<tmp<<endl;
}
아이디어
15이원준
피보나치 함수
- 결국 각 수에 대한 0과 1이 나타는 수를 피보나치와 같이 더해주면 된다.
RGB 거리
- 생략