Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int dp[1005][1005];
- int solve(int l, int r, vector<int>&cuts){
- if(dp[l][r])return dp[l][r];
- bool foundCuts = false;
- int mini = 1e9;
- for(auto cut:cuts){
- if(cut > l && cut < r){
- foundCuts = true;
- mini = min(mini, solve(l, cut, cuts) + solve(cut, r, cuts));}
- }
- if(!foundCuts)return dp[l][r] = 0;
- return dp[l][r] = mini + r - l;
- }
- int main(){
- int n, k;
- while (true){
- cin >> n;
- if(!n)break;
- cin >> k;
- vector<int>arr(k);
- for(auto &e:arr)cin >> e;
- for(int i=0; i<1005; i++)for(int j=0; j<1005; j++)dp[i][j] = 0;
- cout << "The minimum cutting is " << solve(0,n,arr) << ".\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement