Submission #61421


ソースコード

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(n);i++)
#define reps(i,n) for(int i=1;i<=(n);i++)
#define lol long long
#define SUM(n) ((n)+1)*(n)/2 //1〜nまでの総和を求める式
#define mp make_pair
#define fi first
#define se second
#define pu push_back
#define SYOU(x) fixed<<setprecision(x+1) //小数点桁数を指定する
#define abs(x,y) max(x,y)-min(x,y)
#define all(v) v.begin(),v.end()
#define UPDigit(a,b) (a+b-1)/b //小数点切り上げ
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3fLL;
const int MOD=int(1e9)+7;
using namespace std;
using pii = pair<int, int>;
typedef vector<int> vit;
/*
struct SegmentTree{
vector<lol> SumV(1000005,0);
vector<lol> MaxV(1000005,0);
vector<lol> MinV(1000005,0);
int N;
void update(int i,int x){
i += N - 1;
minv[i] = x;
maxv[i] = x;
sumv[i] = x;
while(i > 0){
i = (i - 1)/2;
maxv[i] = max(maxv[i*2+1],maxv[i*2+2]);
minv[i] = min(minv[i*2+1],minv[i*2+2]);
sumv[i] = sumv[i*2+1]+sumv[i*2+2];
}
}
void add(int i,int x){
i += N - 1;
sumv[i] += x;
maxv[i] += x;
minv[i] += x;
while(i > 0){
i = (i - 1)/2;
sumv[i] = sumv[i*2+1]+sumv[i*2+2];
minv[i] = min(minv[i*2+1],minv[i*2+2]);
maxv[i] = max(maxv[i*2+1],maxv[i*2+2]);
}
}
int getmax(int a,int b,int k,int l,int r){
if(r <= a || b <= l) return -INF;
if(a <= l && r <= b) return maxv[k];
else{
int c1 = getmax(a,b,2*k+1,l,(l+r)/2);
int c2 = getmax(a,b,2*k+2,(l+r)/2,r);
return max(c1,c2);
}
}
int getmin(int a,int b,int k,int l,int r){
if(r <= a || b <= l) return INF;
if(a <= l && r <= b) return minv[k];
else{
int c1 = getmin(a,b,2*k+1,l,(l+r)/2);
int c2 = getmin(a,b,2*k+2,(l+r)/2,r);
return min(c1,c2);
}
}
int getsum(int a,int b,int k,int l,int r){
if(r <= a || b <= l) return 0;
if(a <= l && r <= b) return sumv[k];
else{
int c1 = getsum(a,b,2*k+1,l,(l+r)/2);
int c2 = getsum(a,b,2*k+2,(l+r)/2,r);
return c1+c2;
}
}
}
*/
//最大公約数
lol gcd(lol x, lol y){
if(x < y) swap(x, y);
lol r = x % y;
while(r != 0){
x = y;
y = r;
r = x % y;
}
return y;
}
//最小公倍数
lol lcm(lol x, lol y){
lol a = x * y;
return (a / gcd(x, y));
}
signed main(void){
cin.tie(nullptr);
ios_base::sync_with_stdio(false);
int h, w;
cin >> h >> w;
lol dp[h + 5][w + 5] = {};
reps(i, h){
reps(j, w){
cin >> dp[i][j];
}
}
reps(i, h){
reps(j, w){
dp[i][j] += max(dp[i - 1][j], dp[i][j - 1]);
}
}
cout << dp[h][w] << '\n';
return 0;
}

ステータス

項目 データ
問題 0910 - 百円以下の拾得物
ユーザー名 NASSUN_ei1906
投稿日時 2020-07-29 17:52:32
言語 C++17
状態 Accepted
得点 3
ソースコード長 2812 Byte
最大実行時間 166 ms
最大メモリ使用量 25944 KB

セット

セット 得点 Cases
1 ALL 3 / 3 *

テストケース

ファイル名 状態 実行時間 メモリ使用量 #
in01.txt AC 44 ms 476 KB
1
in02.txt AC 18 ms 560 KB
1
in03.txt AC 26 ms 512 KB
1
in04.txt AC 24 ms 460 KB
1
in05.txt AC 27 ms 536 KB
1
in06.txt AC 166 ms 12268 KB
1
in07.txt AC 110 ms 16108 KB
1
in08.txt AC 156 ms 20844 KB
1
in09.txt AC 129 ms 25708 KB
1
in10.txt AC 33 ms 17904 KB
1
in11.txt AC 62 ms 25944 KB
1
sample_in_1.txt AC 42 ms 20804 KB
1
sample_in_2.txt AC 24 ms 20888 KB
1