zoukankan      html  css  js  c++  java
  • poj1160 动态规划

     1 #include<stdio.h>
     2 #include<string.h>
     3 #define INF 999999999
     4 #define Min(x,y) (x<y?x:y)
     5 #define max 300+5
     6 //dp[i][k]记录在从1到i的村庄中放置k个邮局的最短总距离
     7 //sum[i][j]记录在从第i到第j个村庄中放置一个邮局的最短总距离
     8 int dp[max][30+5],sum[max][max];
     9 int n,m,x[max];
    10 
    11 int main(){
    12     while(~scanf("%d%d",&n,&m)){
    13         for(int i=1;i<=n;i++){
    14             scanf("%d",&x[i]);
    15         }
    16         memset(sum,0,sizeof(sum));
    17         for(int i=1;i<n;i++){
    18             for(int j=i+1;j<=n;j++){
    19                 //最优的方案肯定是将邮局放在中间的村庄中
    20                 sum[i][j]=sum[i][j-1]+x[j]-x[(j+i)/2];
    21             }
    22         }
    23         for(int i=1;i<=n;i++){
    24             for(int j=1;j<=m;j++){
    25                 dp[i][j]=INF;
    26             }
    27             dp[i][1]=sum[1][i];
    28         }
    29         for(int k=2;k<=m;k++){
    30             for(int i=k;i<=n;i++){
    31                 int res=INF;
    32                 for(int j=k-1;j+1<=i;j++){
    33                     //转移方程在前j个村庄中放置k-1个邮局的最短距离+在从第j+1到第i个村庄中放1个邮局的最短距离,后者就是sum[j+1][i]
    34                     res=Min(res,dp[j][k-1]+sum[j+1][i]);
    35                 }
    36                 dp[i][k]=res;
    37             }
    38         }
    39         printf("%d
    ",dp[n][m]);
    40     }
    41 }
  • 相关阅读:
    (周日赛) Average is not Fast Enough!
    过山车
    (寒假CF3)B
    (寒假CF3)坑坑坑
    (周六赛1)Sum it up
    畅通工程
    vue 动态添加form表单item 校验问题
    html2canvas转pdf分页隔断问题处理
    vue中html转pdf并下载功能
    一个简单的滑动溢出效果
  • 原文地址:https://www.cnblogs.com/Stomach-ache/p/3703228.html
Copyright © 2011-2022 走看看