テスト ``` #include<bits/stdc++.h> using namespace std; typedef long long ll; const ll MOD = 1000000007; #define rep(i,n) for(int i = 0; i < (n); i++) ll dp[1000][1000]; //念のためlong lnogで宣言します int main(){ //入力部 ll R, C, H, M; cin >> R >> C >> H >> M; int time[R][C]; int tmp; rep(i,R) rep(j,C){ cin >> tmp; if(tmp == 1) time[i][j] = H; else time[i][j] = M; } //分岐を書きたくない場合は、こんな感じで先に書いてしまうのもありだと思います //使い分ければバグを生み辛くなると思います for(int i = 1; i < C; i++) dp[R-1][i] = dp[R-1][i-1] + time[R-1][i-1]; for(int i = R-2; i >= 0; i--) dp[i][0] = dp[i+1][0] + time[i+1][0]; //一般部分計算 for(int i = R-2; i >= 0; i--){ for(int j = 1; j < C; j++){ dp[i][j] = min( //minはこんな感じの書き方で比較するものを明示することができます dp[i+1][j] + time[i+1][j], //この問題ではtimeは貰う相手の座標の方でも上手く行きますが、 dp[i][j-1] + time[i][j-1] //上手く使い分けられると嬉しいです ); } } cout << dp[0][C-1] << endl; } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up