a53

Himalaya

a53
Nov 30th, 2017
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 KB | None | 0 0
  1. #include <cstdio>
  2. #define Nmax 501
  3. #define INF 1000000000
  4. using namespace std;
  5. int N,K,C1,C2,H[Nmax],dp[Nmax][Nmax],Tata[Nmax][Nmax],sol[Nmax];
  6.  
  7. int Cost(int k,int j,int i)
  8. {
  9. if(j==0)
  10. return 0;
  11. if(H[j]<=H[i])
  12. return dp[k][j]+(H[i]-H[j])*C1;
  13. else
  14. return dp[k][j]+(H[j]-H[i])*C2;
  15. }
  16.  
  17. int main()
  18. {
  19. freopen("himalaya.in","r",stdin);
  20. scanf("%d%d%d%d",&N,&K,&C1,&C2);
  21. for(int i=1;i<=N;++i)
  22. scanf("%d",&H[i]);
  23. for(int i=1;i<=K;++i)
  24. for(int j=1;j<=N;++j)
  25. dp[i][j]=-INF;
  26. dp[1][1]=0;
  27. for(int k=2;k<=K;++k)
  28. for(int i=k;i<=N;++i)
  29. {
  30. int index=k-1;
  31. for(int j=k-1;j<i;++j)
  32. if(Cost(k-1,j,i)>Cost(k-1,index,i))
  33. index=j;
  34. dp[k][i]=Cost(k-1,index,i);
  35. Tata[k][i]=index;
  36. }
  37. int L=0;
  38. int curent=N;
  39. for(;K;--K)
  40. sol[++L]=curent,curent=Tata[K][curent];
  41. freopen("himalaya.out","w",stdout);
  42. for(int i=L;i>=1;--i)
  43. printf("%d ",sol[i]);
  44. printf("\n");
  45. return 0;
  46. }
Add Comment
Please, Sign In to add comment