YEZAELP

UVA-10003: Cutting Sticks

Jun 8th, 2020
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.69 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int INF=1e9;
  4. int l,n;
  5. int ar[51];
  6. int dp[1001][1001];
  7. int f(int i,int j){
  8.     if(dp[i][j]!=INF) return dp[i][j];
  9.     bool have=false;
  10.     for(int k=1;k<=n;k++){
  11.         if(ar[k]>=i && ar[k]<j){
  12.             dp[i][j]=min(dp[i][j], f(i,ar[k])+f(ar[k]+1,j)+(j-i+1) );
  13.             have=true;
  14.         }
  15.     }
  16.     if(have){
  17.         return dp[i][j];
  18.     }
  19.     else {
  20.         return 0;
  21.     }
  22.  
  23. }
  24. int main(){
  25.     scanf("%d%d",&l,&n);
  26.     for(int i=1;i<=n;i++){
  27.         scanf("%d",&ar[i]);
  28.     }
  29.     for(int i=1;i<=l;i++){
  30.         for(int j=1;j<=l;j++){
  31.             dp[i][j]=INF;
  32.         }
  33.     }
  34.     cout<<f(1,l);
  35.     return 0;
  36. }
Add Comment
Please, Sign In to add comment