Advertisement
yragi_san

Cutting Sticks

Mar 9th, 2023
329
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.77 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int dp[1005][1005];
  5.  
  6. int solve(int l, int r, vector<int>&cuts){
  7.     if(dp[l][r])return dp[l][r];
  8.     bool foundCuts = false;
  9.     int mini = 1e9;
  10.     for(auto cut:cuts){
  11.         if(cut > l && cut < r){
  12.         foundCuts = true;
  13.         mini = min(mini, solve(l, cut, cuts) + solve(cut, r, cuts));}
  14.     }
  15.     if(!foundCuts)return dp[l][r] = 0;
  16.     return dp[l][r] = mini + r - l;
  17. }
  18.  
  19. int main(){
  20.     int n, k;
  21.     while (true){
  22.         cin >> n;
  23.         if(!n)break;
  24.         cin >> k;
  25.         vector<int>arr(k);
  26.         for(auto &e:arr)cin >> e;
  27.         for(int i=0; i<1005; i++)for(int j=0; j<1005; j++)dp[i][j] = 0;
  28.         cout << "The minimum cutting is " << solve(0,n,arr) << ".\n";
  29.     }
  30.     return 0;
  31. }
  32.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement