zoukankan      html  css  js  c++  java
  • bzoj1617[Usaco2008 Mar]River Crossing渡河问题*

    bzoj1617[Usaco2008 Mar]River Crossing渡河问题

    题意:

    一个人和n牛渡河,人载i头牛渡河所需时间为m+sigma(j,1,i)a[j],人不载牛所需时间为m,到了对岸如果还要载牛必须花时间m把船开回来。问最短时间。n≤2500

    题解:

    dp。f[i][j]=min(f[i+1][j+1]+a[j+1],f[i+1][0]+a[j+1]+m*2),最后答案为f[1][0]+m。

    代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #define maxn 3000
     5 #define inc(i,j,k) for(int i=j;i<=k;i++)
     6 #define dec(i,j,k) for(int i=j;i>=k;i--)
     7 using namespace std;
     8 
     9 inline int read(){
    10     char ch=getchar(); int f=1,x=0;
    11     while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
    12     while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    13     return f*x;
    14 }
    15 int n,m,a[maxn],x[maxn],y[maxn];
    16 int main(){
    17     n=read(); m=read(); inc(i,1,n)a[i]=read();
    18     dec(i,n,1){
    19         memset(y,0,sizeof(y)); inc(j,0,i)y[j]=min(x[j+1]+a[j+1],x[0]+a[j+1]+m*2); swap(x,y);
    20     }
    21     printf("%d",x[0]+m); return 0;
    22 }

    20160803

  • 相关阅读:
    大数减法
    MySQL配置的一些坑
    最大流_Edmonds-Karp算法
    最小生成树两连
    最短路三连
    对拍
    Broadcast
    Intent
    Custom Views
    Fragment
  • 原文地址:https://www.cnblogs.com/YuanZiming/p/5743977.html
Copyright © 2011-2022 走看看