More actions
({CREATE}) |
No edit summary |
||
| Line 3: | Line 3: | ||
= 오늘의 문제 = | = 오늘의 문제 = | ||
* [https://www.acmicpc.net/problem/1003|피보나치 함수] | * [https://www.acmicpc.net/problem/1003|피보나치 함수] | ||
* [https://www.acmicpc.net/problem/1149|RGB거리] | |||
= 참가자 = | = 참가자 = | ||
* 15이원준 | * 15이원준 | ||
| Line 8: | Line 9: | ||
= 코드 = | = 코드 = | ||
== 15이원준 == | == 15이원준 == | ||
=== 피보나치 함수 === | |||
#include<iostream> | #include<iostream> | ||
#include<utility> | #include<utility> | ||
| Line 36: | Line 38: | ||
printf("%d %d\n", arr[n][0],arr[n][1]); | 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이원준 == | == 15이원준 == | ||
=== 피보나치 함수 === | |||
* 결국 각 수에 대한 0과 1이 나타는 수를 피보나치와 같이 더해주면 된다. | * 결국 각 수에 대한 0과 1이 나타는 수를 피보나치와 같이 더해주면 된다. | ||
=== RGB 거리 === | |||
* 생략 | |||
Revision as of 14:40, 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 거리
- 생략