├── Array Description ├── Book Shop ├── Coin Combinations ├── Coin Combinations II ├── Dice Combinations ├── Edit Distance ├── Grid Paths └── Rectangle Cutting /Array Description: -------------------------------------------------------------------------------- 1 | /* 2 | author: kartik8800 3 | */ 4 | 5 | #include 6 | #define ll long long 7 | #define pb push_back 8 | #define fr(a,b) for(int i = a; i < b; i++) 9 | #define rep(i,a,b) for(int i = a; i < b; i++) 10 | #define mod 1000000007 11 | #define inf (1LL<<60) 12 | #define all(x) (x).begin(), (x).end() 13 | #define prDouble(x) cout << fixed << setprecision(10) << x 14 | #define triplet pair> 15 | #define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL) 16 | using namespace std; 17 | 18 | int solve(int n, int m, vector& v) 19 | { 20 | int dp[n+2][m+2]; 21 | memset(dp, 0, sizeof dp); 22 | 23 | for(int i = 1; i <= n; i++) 24 | { 25 | for(int x = 1; x <= m; x++) 26 | { 27 | if(i == 1) 28 | { 29 | if(v[i] == 0 || v[i] == x) 30 | dp[i][x] = 1; 31 | else dp[i][x] = 0; 32 | } 33 | else 34 | { 35 | if(v[i] == 0 || v[i] == x){ 36 | dp[i][x] = ((dp[i-1][x-1] + dp[i-1][x])%mod + dp[i-1][x+1])%mod; 37 | } 38 | else dp[i][x] = 0; 39 | } 40 | } 41 | } 42 | 43 | int ans = 0; 44 | for(int x = 1; x <= m; x++) 45 | ans = (ans + dp[n][x]) % mod; 46 | return ans; 47 | } 48 | 49 | int main() { 50 | fast_io; 51 | ll t,n,m,x,i,j,k,q; 52 | //cin >> t; 53 | t = 1; 54 | while(t--) 55 | { 56 | int n,m; 57 | cin >> n >> m; 58 | vector v(n+1); 59 | fr(1,n+1) 60 | cin >> v[i]; 61 | cout << solve(n,m,v); 62 | } 63 | return 0; 64 | } 65 | -------------------------------------------------------------------------------- /Book Shop: -------------------------------------------------------------------------------- 1 | /* 2 | author: kartik8800 3 | */ 4 | 5 | #include 6 | #define ll long long 7 | #define pb push_back 8 | #define fr(a,b) for(int i = a; i < b; i++) 9 | #define rep(i,a,b) for(int i = a; i < b; i++) 10 | #define mod 1000000007 11 | #define inf (1LL<<60) 12 | #define all(x) (x).begin(), (x).end() 13 | #define prDouble(x) cout << fixed << setprecision(10) << x 14 | #define triplet pair> 15 | #define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL) 16 | using namespace std; 17 | 18 | 19 | int main() { 20 | fast_io; 21 | ll t,n,m,x,i,j,k,q; 22 | //cin >> t; 23 | t = 1; 24 | while(t--) 25 | { 26 | cin >> n >> x; 27 | vector price(n+1), pages(n+1); 28 | fr(1,n+1) 29 | cin >> price[i]; 30 | fr(1,n+1) 31 | cin >> pages[i]; 32 | 33 | int dp[n+1][x+1]; 34 | 35 | for(int i = 0; i <= n; i++) 36 | { 37 | for(int money = 0; money <= x; money++) 38 | { 39 | if(money == 0 || i == 0) 40 | dp[i][money] = 0; 41 | else 42 | { 43 | int op1 = (i == 1) ? 0 : dp[i-1][money]; 44 | int op2 = (money < price[i]) ? 0 : pages[i] + dp[i-1][money - price[i]]; 45 | dp[i][money] = max(op1,op2); 46 | } 47 | } 48 | } 49 | 50 | cout << dp[n][x]; 51 | 52 | } 53 | return 0; 54 | } 55 | -------------------------------------------------------------------------------- /Coin Combinations: -------------------------------------------------------------------------------- 1 | /* 2 | author: kartik8800 3 | */ 4 | 5 | #include 6 | #define ll long long 7 | #define pb push_back 8 | #define fr(a,b) for(int i = a; i < b; i++) 9 | #define rep(i,a,b) for(int i = a; i < b; i++) 10 | #define mod 1000000007 11 | #define inf (1LL<<60) 12 | #define all(x) (x).begin(), (x).end() 13 | #define prDouble(x) cout << fixed << setprecision(10) << x 14 | #define triplet pair> 15 | #define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL) 16 | using namespace std; 17 | 18 | 19 | int main() { 20 | fast_io; 21 | ll t,n,m,x,i,j,k,q; 22 | //cin >> t; 23 | t = 1; 24 | while(t--) 25 | { 26 | cin >> n >> x; 27 | vector v(n+1); 28 | fr(1,n+1) 29 | cin >> v[i]; 30 | int dp[n+1][x+1]; 31 | 32 | for(int i = 1; i <= n; i++) 33 | { 34 | for(int sum = 0; sum <= x; sum++) 35 | { 36 | if(sum == 0) 37 | dp[i][sum] = 1; 38 | else 39 | { 40 | int op1 = (v[i] > sum) ? 0 : dp[i][sum - v[i]]; 41 | int op2 = (i == 1) ? 0 : dp[i-1][sum]; 42 | dp[i][sum] = (op1 + op2) % mod; 43 | } 44 | } 45 | } 46 | 47 | cout << dp[n][x]; 48 | } 49 | return 0; 50 | } 51 | -------------------------------------------------------------------------------- /Coin Combinations II: -------------------------------------------------------------------------------- 1 | /* 2 | author: kartik8800 3 | */ 4 | 5 | #include 6 | #define ll long long 7 | #define pb push_back 8 | #define fr(a,b) for(int i = a; i < b; i++) 9 | #define rep(i,a,b) for(int i = a; i < b; i++) 10 | #define mod 1000000007 11 | #define inf (1LL<<60) 12 | #define all(x) (x).begin(), (x).end() 13 | #define prDouble(x) cout << fixed << setprecision(10) << x 14 | #define triplet pair> 15 | #define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL) 16 | using namespace std; 17 | 18 | 19 | int main() { 20 | fast_io; 21 | ll t,n,m,x,i,j,k,q; 22 | //cin >> t; 23 | t = 1; 24 | while(t--) 25 | { 26 | cin >> n >> x; 27 | vector v(n+1); 28 | fr(1,n+1) 29 | cin >> v[i]; 30 | int dp[n+1][x+1]; 31 | 32 | for(int i = 1; i <= n; i++) 33 | { 34 | for(int sum = 0; sum <= x; sum++) 35 | { 36 | if(sum == 0) 37 | dp[i][sum] = 1; 38 | else 39 | { 40 | int op1 = (v[i] > sum) ? 0 : dp[i][sum - v[i]]; 41 | int op2 = (i == 1) ? 0 : dp[i-1][sum]; 42 | dp[i][sum] = (op1 + op2) % mod; 43 | } 44 | } 45 | } 46 | 47 | cout << dp[n][x]; 48 | } 49 | return 0; 50 | } 51 | -------------------------------------------------------------------------------- /Dice Combinations: -------------------------------------------------------------------------------- 1 | /* 2 | author: kartik8800 3 | */ 4 | 5 | #include 6 | #define ll long long 7 | #define pb push_back 8 | #define fr(a,b) for(int i = a; i < b; i++) 9 | #define rep(i,a,b) for(int i = a; i < b; i++) 10 | #define mod 1000000007 11 | #define inf (1LL<<60) 12 | #define all(x) (x).begin(), (x).end() 13 | #define prDouble(x) cout << fixed << setprecision(10) << x 14 | #define triplet pair> 15 | #define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL) 16 | using namespace std; 17 | 18 | 19 | int main() { 20 | fast_io; 21 | ll t,n,m,x,i,j,k,q; 22 | //cin >> t; 23 | t = 1; 24 | while(t--) 25 | { 26 | cin >> n; 27 | vector dp(n+1, 0); 28 | dp[0] = 1; 29 | fr(1,n+1) 30 | { 31 | for(int x = 1; x <= 6; x++) 32 | { 33 | if(x > i) 34 | break; 35 | dp[i] = (dp[i] + dp[i-x]) % mod; 36 | } 37 | } 38 | cout << dp[n]; 39 | } 40 | return 0; 41 | } 42 | -------------------------------------------------------------------------------- /Edit Distance: -------------------------------------------------------------------------------- 1 | /* 2 | author: kartik8800 3 | */ 4 | 5 | #include 6 | #define ll long long 7 | #define pb push_back 8 | #define fr(a,b) for(int i = a; i < b; i++) 9 | #define rep(i,a,b) for(int i = a; i < b; i++) 10 | #define mod 1000000007 11 | #define inf (1LL<<60) 12 | #define all(x) (x).begin(), (x).end() 13 | #define prDouble(x) cout << fixed << setprecision(10) << x 14 | #define triplet pair> 15 | #define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL) 16 | using namespace std; 17 | 18 | int dp[5001][5001]; 19 | int solve(int i, int j, string& s1, string& s2) 20 | { 21 | if(i == s1.length() || j == s2.length()) 22 | return max((int)s2.length() - j, (int)s1.length() - i); 23 | 24 | if(dp[i][j] != -1) 25 | return dp[i][j]; 26 | 27 | int ans; 28 | if(s1[i] == s2[j]){ 29 | ans = solve(i+1,j+1,s1,s2); 30 | } 31 | else{ 32 | int op1 = 1 + solve(i,j+1,s1,s2);//add 33 | int op2 = 1 + solve(i+1,j,s1,s2);//remove 34 | int op3 = 1 + solve(i+1,j+1,s1,s2);//replace 35 | ans = min(op1,min(op2,op3)); 36 | } 37 | return dp[i][j] = ans; 38 | } 39 | 40 | int main() { 41 | fast_io; 42 | ll t,n,m,x,i,j,k,q; 43 | //cin >> t; 44 | t = 1; 45 | while(t--) 46 | { 47 | memset(dp, -1, sizeof dp); 48 | string s1,s2; 49 | cin >> s1 >> s2; 50 | cout << solve(0,0,s1,s2); 51 | } 52 | return 0; 53 | } 54 | -------------------------------------------------------------------------------- /Grid Paths: -------------------------------------------------------------------------------- 1 | /* 2 | author: kartik8800 3 | */ 4 | 5 | #include 6 | #define ll long long 7 | #define pb push_back 8 | #define fr(a,b) for(int i = a; i < b; i++) 9 | #define rep(i,a,b) for(int i = a; i < b; i++) 10 | #define mod 1000000007 11 | #define inf (1LL<<60) 12 | #define all(x) (x).begin(), (x).end() 13 | #define prDouble(x) cout << fixed << setprecision(10) << x 14 | #define triplet pair> 15 | #define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL) 16 | using namespace std; 17 | 18 | 19 | int main() { 20 | fast_io; 21 | ll t,n,m,x,i,j,k,q; 22 | //cin >> t; 23 | t = 1; 24 | while(t--) 25 | { 26 | cin >> n; 27 | bool grid[n+1][n+1]; 28 | 29 | //Input, hai na cool xD 30 | 31 | rep(i,1,n+1)rep(j,1,n+1){ 32 | char ch;cin >> ch; 33 | if(ch == '.')grid[i][j] = 0; 34 | else grid[i][j] = 1; 35 | } 36 | 37 | int dp[n+1][n+1]; 38 | for(int i = n; i >= 1; i--) 39 | { 40 | for(int j = n; j >= 1; j--) 41 | { 42 | if(i == n && j == n) 43 | dp[i][j] = 1; 44 | else 45 | { 46 | int op1 = (j == n) ? 0 : dp[i][j+1]; 47 | int op2 = (i == n) ? 0 : dp[i+1][j]; 48 | dp[i][j] = (op1 + op2) % mod; 49 | if(grid[i][j]) 50 | dp[i][j] = 0; 51 | } 52 | } 53 | } 54 | if(grid[n][n]) 55 | cout << 0; 56 | else cout << dp[1][1]; 57 | } 58 | return 0; 59 | } 60 | -------------------------------------------------------------------------------- /Rectangle Cutting: -------------------------------------------------------------------------------- 1 | /* 2 | author: kartik8800 3 | */ 4 | 5 | #include 6 | #define ll long long 7 | #define pb push_back 8 | #define fr(a,b) for(int i = a; i < b; i++) 9 | #define rep(i,a,b) for(int i = a; i < b; i++) 10 | #define mod 1000000007 11 | #define inf (1LL<<60) 12 | #define all(x) (x).begin(), (x).end() 13 | #define prDouble(x) cout << fixed << setprecision(10) << x 14 | #define triplet pair> 15 | #define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL) 16 | using namespace std; 17 | 18 | int solve(int a, int b) 19 | { 20 | int dp[a+1][b+1]; 21 | 22 | for(int height = 1; height <= a; height++) 23 | { 24 | for(int width = 1; width <= b; width++) 25 | { 26 | if(height == width) 27 | dp[height][width] = 0; 28 | else 29 | { 30 | int ans = 1e8; 31 | for(int i = 1; i < width; i++) 32 | ans = min(ans, 1 + dp[height][width - i] + dp[height][i]); 33 | for(int i = 1; i < height; i++) 34 | ans = min(ans, 1 + dp[height - i][width] + dp[i][width]); 35 | dp[height][width] = ans; 36 | } 37 | } 38 | } 39 | 40 | return dp[a][b]; 41 | } 42 | 43 | int main() { 44 | fast_io; 45 | ll t,n,m,x,i,j,k,q; 46 | //cin >> t; 47 | t = 1; 48 | while(t--) 49 | { 50 | int a,b; 51 | cin >> a >> b; 52 | cout << solve (a,b); 53 | } 54 | return 0; 55 | } 56 | --------------------------------------------------------------------------------