#include <iostream>
#include <string>
#include <string.h>
#include <algorithm>
using namespace std;
 
string word;
int dp[2510][2510];
int minResult[2510];
 
int solve(int s, int e)
{
    if(s >= e)
    {
        return 1;
    }
    
    if(dp[s][e] != -1)
    {
        return dp[s][e];
    }
    
    dp[s][e] = 0;
    
    if(word[s] == word[e])
    {
        dp[s][e] = solve(s+1, e-1);
    }
    
    return dp[s][e];
}
 
int main(void)
{
//    freopen("B1509_input.txt", "r", stdin);
    
    cin >> word;
    word = "0" + word;
    
    memset(dp, -1sizeof(dp));
    
    minResult[0= 0;
    for(int i = 1; i < word.size(); i++)
    {
        minResult[i] = 99999999;
        
        for(int j = 1; j <= i; j++)
        {
            if(solve(j, i) == 1)
            {
                minResult[i] = min(minResult[i], minResult[j-1+ 1);
            }
        }
    }    
    
    cout << minResult[word.size()-1];
    
    return 0;
}
cs

1.

#include <iostream>
#include <string>
#include <string.h>
#include <algorithm>
using namespace std;
 
int N, M;
int arr[2010];
int dp[2010][2010]; // [시작][끝] 
 
int solve(int s, int e)
{
    if(s >= e)
    {
        return 1;
    }
    
    if(dp[s][e] != -1)
    {
        return dp[s][e];
    }
    
    dp[s][e] = 0;
    
    if(arr[s] == arr[e])
    {
        dp[s][e] = solve(s+1, e-1);    
    }
    
    return dp[s][e];
}
 
int main(void)
{
//    freopen("B10942_input.txt", "r", stdin);
    
    ios_base :: sync_with_stdio(false); 
    cin.tie(NULL); 
    cout.tie(NULL);
    
    cin >> N;
    
    for(int i = 1; i <= N; i++)
    {
        cin >> arr[i];
    }
    memset(dp, -1sizeof(dp));
    
    cin >> M;
    
    for(int i = 1; i <= M; i++)
    {
        int s, e;
        cin >> s >> e;
        
        cout << solve(s, e) << "\n";
    }
 
    return 0;
}
cs

 

2.

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
 
int N, M;
int arr[2010];
int dp[2010][2010]; // [시작][끝] 
 
int main(void)
{
//    freopen("B10942_input.txt", "r", stdin);
    
    ios_base :: sync_with_stdio(false); 
    cin.tie(NULL); 
    cout.tie(NULL);
    
    cin >> N;
    
    for(int i = 1; i <= N; i++)
    {
        cin >> arr[i];
    }
    
    // 길이 1
    for(int i = 1; i <= N; i++)
    {
        dp[i][i] = 1;    
    } 
    
    // 길이 2
    for(int i = 1; i <= N-1; i++)
    {
        if(arr[i] == arr[i+1])
        {
            dp[i][i+1= 1;
        }    
    } 
    
    // 길이 3이상
    for(int k = 3; k <= N; k++)
    {
        for(int i = 1; i <= N-k+1; i++)
        {
            int j = i+k-1;
            
            if(arr[i] == arr[j] && dp[i+1][j-1== 1)
            {
                dp[i][j] = 1;
            }
        }
    }
    
    cin >> M;
    
    for(int i = 1; i <= M; i++)
    {
        int s, e;
        cin >> s >> e;
        
        cout << dp[s][e] << "\n";
    }
 
    return 0;
}
cs
#include <iostream>
#include <algorithm>
using namespace std;
 
int row, col;
int map[1010][1010];
int dp[1010][1010];
 
int dx[3= {101}; 
int dy[3= {011};  
 
int safe(int x, int y)
{
    if(x >= 0 && y >= 0 && x < row && y < col)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
 
int DFS(int x, int y)
{
    if(x == row-1 && y == col-1)
    {
        return map[x][y];
    }
    
    if(dp[x][y] != -1)
    {
        return dp[x][y];
    }
    
    for(int i = 0; i < 3; i++)
    {
        int xpos = x + dx[i];
        int ypos = y + dy[i];
            
        if(safe(xpos, ypos) == 1)
        {
            dp[x][y] = max(dp[x][y], DFS(xpos, ypos) + map[x][y]);
        }
    }
    
    return dp[x][y];
}
 
int main(void)
{
//    freopen("B11048_input.txt", "r", stdin);
    
    cin >> row >> col;
    
    for(int i = 0; i < row; i++)
    {
        for(int j = 0; j < col; j++)
        {
            cin >> map[i][j];
            dp[i][j] = -1;
        }
    }
    
    cout << DFS(00);
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
 
int E, S, M;
int e = 1;
int s = 1;
int m = 1;
int year = 1;
 
int main(void)
{
//    freopen("B1476_input.txt", "r", stdin);
    
    cin >> E >> S >> M;
    
    while(1)
    {    
        if(e > 15)
        {
            e = 1;
        }
        
        if(s > 28)
        {
            s = 1;
        }
        
        if(m > 19)
        {
            m = 1;
        }
        
        if(E == e && S == s && M == m)
        {
            cout << year;
            break;
        }
        
        e++;
        s++;
        m++;
        year++;
    }
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
#include <string>
#include <string.h>
using namespace std;
 
string word;
string Min;
int divideIdx[2];
 
void combination(int idx, int cnt)
{
    if(cnt == 2)
    {
        string first = word.substr(0, divideIdx[0]+1);
        string second = word.substr(divideIdx[0]+1, divideIdx[1]-divideIdx[0]);
        string third = word.substr(divideIdx[1]+1);
        
        reverse(first.begin(), first.end());
        reverse(second.begin(), second.end());
        reverse(third.begin(), third.end());
        
        string temp = first;
        temp += second;
        temp += third;
        
        if(Min > temp)
        {
            Min = temp;
        }
        
        return;
    }
    
    for(int i = idx; i < word.size()-1; i++)
    {
        divideIdx[cnt] = i;
        combination(i+1, cnt+1);
    }
}
 
int main(void)
{
//    freopen("B1251_input.txt", "r", stdin);
    
    cin >> word;
    
    for(int i = 0; i < word.size(); i++)
    {
        Min += "z";
    }
    
    combination(00);
    
    cout << Min;
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
#include <string>
#include <string.h>
using namespace std;
 
string word;
string result;
int alphabet[26];
 
int main(void)
{
//    freopen("B1520_input.txt", "r", stdin);
 
    cin >> word;
 
    for(int i = 0; i < word.size(); i++)
    {
        alphabet[word[i]-'A']++;
    }
    
    if(word.size() % 2 == 1)
    {
        int cnt = 0;
        
        for(int i = 0; i < 26; i++)
        {
            if(alphabet[i] % 2 == 1)
            {
                cnt++;
            }
        }
        
        if(cnt >= 2)
        {
            cout << "I'm Sorry Hansoo";
            return 0;
        }
    }
    else
    {
        for(int i = 0; i < 26; i++)
        {
            if(alphabet[i] % 2 == 1)
            {
                cout << "I'm Sorry Hansoo";
                return 0;
            }
        }
    }
    
    if(word.size() % 2 == 1)
    {
        for(int i = 0; i < 26; i++)
        {
            for(int j = 1; j <= alphabet[i]/2; j++)
            {
                result += ('A' + i);
            }    
            
            if(result.size() == word.size()/2)
            {
                break;
            }
        }    
        
        cout << result;
        
        for(int i = 0; i < 26; i++)
        {
            if(alphabet[i] % 2 == 1)
            {
                cout << char('A' + i);
                break;
            }
        }
        
        reverse(result.begin(), result.end());
        
        cout << result;
    }
    else
    {
        for(int i = 0; i < 26; i++)
        {
            for(int j = 1; j <= alphabet[i]/2; j++)
            {
                result += ('A' + i);
            }    
            
            if(result.size() == word.size()/2)
            {
                break;
            }
        }
        
        cout << result;
        
        reverse(result.begin(), result.end());
        
        cout << result;
    }
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
using namespace std;
 
int N;
int map[110][110];
long long dp[110][110];
 
int dx[2= {01}; // 우하
int dy[2= {10}; // 우하 
 
int safe(int x, int y)
{
    if(x >= 0 && y >= 0 && x < N && y < N)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
 
long long DFS(int x, int y)
{
    if(x == N-1 && y == N-1)
    {
        return 1;
    }
    else if(map[x][y] == 0)
    {
        return 0;
    }
    
    if(dp[x][y] != 0)
    {
        return dp[x][y];
    }
    
    for(int i = 0; i < 2; i++)
    {
        int xpos = x + (dx[i] * map[x][y]);
        int ypos = y + (dy[i] * map[x][y]);    
            
        if(safe(xpos, ypos) == 1)
        {
            dp[x][y] += DFS(xpos, ypos);
        }
    }
    
    return dp[x][y];
}
 
int main(void)
{
//    freopen("B1890_input.txt", "r", stdin);
    
    cin >> N;
    
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < N; j++)
        {
            cin >> map[i][j];
        }
    }
    
    cout << DFS(00);
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
 
int T, N;
long long dp[70];
 
long long solve(int n)
{
    if(dp[n] != 0)
    {
        return dp[n];
    }
    
    for(int i = n-1; i >= n-4; i--)
    {
        dp[n] += solve(i);    
    }
    
    return dp[n];
}
 
int main(void)
{
//    freopen("B9507_input.txt", "r", stdin);
 
    cin >> T;
    
    dp[0= 1, dp[1= 1, dp[2= 2, dp[3= 4;
    
    while(T--)
    {
        cin >> N;
        
        cout << solve(N) << endl;    
    }
    
    return 0;
}
cs

+ Recent posts