순열을 이용해 해결할 수 있는 문제다 기억해야할건 순열을 쓰기전에 정렬시키고 사용해야 한다는 것! 그걸 잊고있다가 오랜시간이 걸렸당.. 사용되는 알파벳을 찾아두고 순열로 점수를 매겨서 최댓값을 찾아보면 된다! 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #include #include #include #include #include using namespace std; int n; int a[11],b[111]; bool c[30]; string sa[11]; int main(){ scanf(" %d",&n); for(int i=0;i>sa[i]; ..
순열을 이용해 풀 수 있는 문제다! 숫자를 최대 10개 사용하기 때문에 다 넣어보고 부등호를 만족한다면 그 중 가장 큰것과 작은것을 찾아내면 된다! 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #include #include #include using namespace std; #define ll long long ll M = 0; ll N = 1e12; int maxn[11],minn[11]; char op[11]; int a[10]; int n; bool check(){ for(int i=0;ia[i+1])) retur..
유명한 문제다! 근데 오랜만에 dp보다가 틀렸따! 먼저 dp식을 생각해보자 d[n] = n을 마지막으로 하는 가장 긴 수열로 생각하면 된다! 처음에 d[n]은 n까지 보면 가장 긴 길이라고 생각하다가 틀렸었다 n은 1000이기 때문에 그냥 for문을 돌면서 나를 기준으로 앞으로 가면서 나보다 작은수를 만날때마다 내 앞에 올수있는 것 중에서 나보다 길이가 긴 애를 가져가면 된다! 그럼 수열은 어떻게 구하면 될까? stack을 타고간다는 생각으로 나는 내 앞에 오는 작은 수만 생각하면 된다 그럼 가장 긴 수열이 만들어졌을 때 계속 내 바로 앞 숫자만 호출하면 수열이 완성된다! 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ..