#include <iostream>
#include <algorithm>
using namespace std;
 
int N;
int Max;
int arr[1010];
int dp[1010];
 
int solve(int cnt)
{
    if(dp[cnt] != 0)
    {
        return dp[cnt];
    }
 
    dp[cnt] = arr[cnt];
    for(int i = cnt-1; i >= 1; i--)
    {
        if(arr[i] < arr[cnt])
        {
            dp[cnt] = max(dp[cnt], solve(i) + arr[cnt]);        
        }
    }
    
    return dp[cnt];
}
 
int main(void)
{
//    freopen("B11055_input.txt", "r", stdin);
    
    cin >> N;
    
    for(int i = 1; i <= N; i++)
    {
        cin >> arr[i];
    }
    
    for(int i = N; i >= 1; i--)
    {
        Max = max(Max, solve(i));    
    }
    
    cout << Max;
    
    return 0;
}
cs
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
 
int N;
int Max;
int arr[1010];
int dp[1010];
 
int solve(int cnt)
{
    if(dp[cnt] != 0)
    {
        return dp[cnt];
    }
    
    dp[cnt] = 1;
    for(int i = cnt-1; i >= 1; i--)
    {
        if(arr[i] < arr[cnt])
        {
            dp[cnt] = max(dp[cnt], solve(i) + 1);        
        }
    }
    
    return dp[cnt];
}
 
int main(void)
{
//    freopen("B11053_input.txt", "r", stdin);
    
    cin >> N;
    
    for(int i = 1; i <= N; i++)
    {
        cin >> arr[i];
    }
    
    for(int i = N; i >= 1; i--)
    {
        Max = max(Max, solve(i));
    }
    
    cout << Max;
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
using namespace std;
 
int N;
int grape[10010];
int dp[10010][3];
 
int solve(int cnt, int chain)
{
    if(cnt <= 0 || chain == 3)
    {
        return 0;
    }
    else if(cnt == 1)
    {
        return grape[cnt];
    }
    
    if(dp[cnt][chain] != 0)
    {
        return dp[cnt][chain];
    }
    
    // 1. 지금것을 안먹고 넘어가는 경우, 2. 지금것도 먹고 다음것도 먹는 경우, 3. 지금것은 먹고 다음것은 안먹는 경우
    dp[cnt][chain] = max({solve(cnt-11), solve(cnt-1, chain+1+ grape[cnt], solve(cnt-21+ grape[cnt]}); 
    
    return dp[cnt][chain];
}
 
int main(void)
{
//    freopen("B2156_input.txt", "r", stdin);
    
    cin >> N;
    
    for(int i = 1; i <= N; i++)
    {
        cin >> grape[i];
    }
    
    cout << solve(N, 1);
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
 
int N;
int T;
int dp[100010][2];
int sticker[100010][2];
 
int solve(int cnt, int row)
{
    if(cnt <= 0)
    {
        return 0;
    }
    
    if(dp[cnt][row] != -1)
    {
        return dp[cnt][row];
    }
    
    if(row == 0)
    {
        dp[cnt][row] = max({solve(cnt-20), solve(cnt-21), solve(cnt-11)}) + sticker[cnt][row];
    }
    else
    {
        dp[cnt][row] = max({solve(cnt-21), solve(cnt-20), solve(cnt-10)}) + sticker[cnt][row];
    }
    
    return dp[cnt][row];
}
 
int main(void)
{
//    freopen("B9465_input.txt", "r", stdin);
    
    cin >> T;
    
    for(int i = 1; i <= T; i++)
    {
        cin >> N;
        
        memset(dp, -1sizeof(dp));
        
        // 1행 
        for(int j = 1; j <= N; j++)
        {
            cin >> sticker[j][0];
        }
        
        // 2행 
        for(int j = 1; j <= N; j++)
        {
            cin >> sticker[j][1];
        }
    
        cout << max(solve(N, 0), solve(N, 1)) << endl;
    }
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
using namespace std;
 
int N;
long long dp[100][2];
 
long long solve(int cnt, int num)
{
    if(cnt == 1)
    {
        return num == 0 ? 0 : 1;
    }
    
    if(dp[cnt][num] != 0)
    {
        return dp[cnt][num];
    }
    
    if(num == 1)
    {
        dp[cnt][num] = solve(cnt-10);
    }
    else
    {
        dp[cnt][num] = solve(cnt-10+ solve(cnt-11);
    }
    
    return dp[cnt][num];
}
 
int main(void)
{
//    freopen("B2193_input.txt", "r", stdin);
    
    cin >> N;
    
    cout << solve(N, 0+ solve(N, 1); 
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
using namespace std;
 
#define MOD 10007
 
int N;
int sum;
int dp[1010][11];
 
int solve(int cnt, int num)
{
    if(cnt == 1)
    {
        return 1;
    }
    
    if(dp[cnt][num] != 0)
    {
        return dp[cnt][num];
    }
 
    for(int i = num; i >= 0; i--)
    {
        dp[cnt][num] = (dp[cnt][num] + solve(cnt-1, i)) % MOD;    
    }
    
    return dp[cnt][num];
}
 
int main(void)
{
//    freopen("B11057_input.txt", "r", stdin);
    
    cin >> N;
    
    for(int i = 0; i <= 9; i++)
    {
        sum = (sum + solve(N, i)) % MOD;     
    }
    
    cout << sum;
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
using namespace std;
 
#define MOD 1000000000
 
int N;
int sum;
long long dp[110][11];
 
int solve(int cnt, int num)
{
    if(cnt == 1)
    {
        return num == 0 ? 0 : 1;
    }
    
    if(dp[cnt][num] != 0)
    {
        return dp[cnt][num];
    }
 
    if(num == 0)
    {
        dp[cnt][num] = solve(cnt-1, num+1) % MOD;
    }
    else if(num == 9)
    {
        dp[cnt][num] = solve(cnt-1, num-1) % MOD;
    }
    else
    {
        dp[cnt][num] = (solve(cnt-1, num-1+ solve(cnt-1, num+1)) % MOD;
    }
    
    return dp[cnt][num];
}
 
int main(void)
{
//    freopen("B10844_input.txt", "r", stdin);
    
    cin >> N;
    
    for(int i = 0; i <= 9; i++)
    {
        sum = (sum + solve(N, i)) % MOD;        
    }
    
    cout << sum;
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
 
int T;
int num;
int dp[20];
 
int solve(int n)
{
    if(n < 0)
    {
        return 0;
    }
    else if(n == 0)
    {
        return 1;
    }
    
    if(dp[n] != 0)
    {
        return dp[n];
    }
    
    dp[n] = solve(n-1+ solve(n-2+ solve(n-3);
    
    return dp[n];
}
 
int main(void)
{
//    freopen("B9095_input.txt", "r", stdin);
    
    cin >> T;
 
    for(int i = 1; i <= T; i++)
    {
        cin >> num;    
        
        cout << solve(num) << endl;
    }
    
    return 0;
}
cs

+ Recent posts