• hdu 4540 dp


    题意:

    假设:
      1、每一个时刻我们只能打一只地鼠,并且打完以后该时刻出现的所有地鼠都会立刻消失;
      2、老鼠出现的位置在一条直线上,如果上一个时刻我们在x1位置打地鼠,下一个时刻我们在x2位置打地鼠,那么,此时我们消耗的能量为abs( x1 - x2 );
      3、打第一只地鼠无能量消耗。

      现在,我们知道每个时刻所有冒出地面的地鼠位置,若在每个时刻都要打到一只地鼠,请计算最小需要消耗多少能量。

    链接:点我

    令dp[i][j]表示为第i次打j个地鼠所消耗的最少能量,转移方程见代码

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<queue>
     7 #include<map>
     8 using namespace std;
     9 #define MOD 1000000007
    10 const int INF=0x3f3f3f3f;
    11 const double eps=1e-5;
    12 #define cl(a) memset(a,0,sizeof(a))
    13 #define ts printf("*****
    ");
    14 const int MAXN=1005;
    15 int n,m,tt;
    16 int a[MAXN][MAXN],dp[MAXN][MAXN];
    17 int main()
    18 {
    19     int i,j,k;
    20     #ifndef ONLINE_JUDGE
    21     freopen("1.in","r",stdin);
    22     #endif
    23     while(scanf("%d%d",&n,&m)!=EOF)
    24     {
    25         for(i=0;i<n;i++)
    26             for(j=0;j<m;j++)
    27             {
    28                 scanf("%d",&a[i][j]);
    29                 dp[i][j]=INF;
    30             }
    31         for(i=0;i<m;i++)    dp[0][i]=0;
    32         for(i=1;i<n;i++)
    33         {
    34             for(j=0;j<m;j++)
    35             {
    36                 for(k=0;k<m;k++)
    37                 {
    38                     dp[i][j]=min(dp[i][j],dp[i-1][k]+abs(a[i][j]-a[i-1][k]));
    39                 }
    40             }
    41         }
    42         int minn=INF;
    43         for(i=0;i<m;i++)
    44         {
    45             minn=min(minn,dp[n-1][i]);
    46         }
    47         printf("%d
    ",minn);
    48     }
    49 }
  • 相关阅读:
    响应式设计
    Flex box 弹性盒子布局
    下拉菜单  -
    html使用技巧
    nth-of-type(n)
    Js中 关于top、clientTop、scrollTop、offsetTop
    仿iPhone滑屏操作
    网页超过一页 点击回到顶部
    linux svn使用
    Linux查看CPU和内存使用情况
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4472870.html
Copyright © 2020-2023  润新知