寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

Aizu Online Judge in C++ #Volume26 : 2607 - Invest Master

Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。

・問題 "Invest Master"
https://onlinejudge.u-aizu.ac.jp/problems/2607
・投資マスター
僕が作成、提出したコードは、以下のとおりです。

・Aizu Online Judge in C++ #Volume26 - 2607 : Invest Master
/*
Aizu Online Judge in C++ #Volume26 - 2607 : Invest Master
 https://onlinejudge.u-aizu.ac.jp/problems/2607
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
ll n,d,x,p[10][10],dp[1<<17];
int main(void){
    cin>>n>>d>>x;
    for(ll i=0;i<d;i++){
        for(ll j=0;j<n;j++){
            cin>>p[i][j];
        }
    }
    for(ll i=0;i<d-1;i++){
        for(ll j=0;j<1<<17;j++){
            dp[j]=0;
        }
        for(ll j=0;j<1<<17;j++){
            for(ll k=0;k<n;k++){
                if(j+p[i][k]>=1<<17){
                    continue;
                }
                dp[j+p[i][k]]=max(dp[j+p[i][k]],dp[j]+p[i+1][k]);
            }
            if(j+1<1<<17){
                dp[j+1]=max(dp[j+1],dp[j]+1);
            }
        }
        x=dp[x];
    }
    cout<<x<<endl;
    return 0;
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/