zoukankan      html  css  js  c++  java
  • poj 1695

    用动态规划,dp[a][b][c]表示从位置最大的车在a(注意不是第一辆车),第二的车在b,第三的车在c开始最少需要的时间。

    方程:dp[a][b][c]=max{dp[a+1][b][c],     //a到a+1

                       dp[a+1][a][c],      //b到a+1

                       dp[a+1][a][b],      //c到a+1

    用滚动数组优化时空,status应该能到90左右

    代码:

    #include<cstdio>

    #include<cstring>

    using namespace std;

    int dp[30][30]={0},d[30][30];

    int min(int x,int y){

             return (x<y)?x:y;

    }

    int main(){

             int t;

             scanf("%d",&t);

             while(t--){

                       for(int i=0;i<30;i++)

                                for(int j=0;j<30;j++)

                                         dp[i][j]=0;

                       int n;

                       scanf("%d",&n);

                       for(int i=0;i<n-1;i++)

                                for(int j=i+1;j<n;j++)

                                         scanf("%d",&d[i][j]);

                       for(int a=n-2;a>=0;a--){

                                for(int b=0;b<=a;b++)

                                         for(int c=0;c<=a;c++){

                                                   int ans=dp[b][c]+d[a][a+1];

                                                   ans=min(ans,dp[a][c]+d[b][a+1]);

                                                   ans=min(ans,dp[a][b]+d[c][a+1]);

                                                   dp[b][c]=ans;

                                         }

                       }

                       printf("%d\n",dp[0][0]);

             }

             return 0;

    }

  • 相关阅读:
    Backbone的 listenTo 和 on
    前端工作流程
    Zepto源码笔记(三)
    Zepto源码笔记(二)
    Zepto源码笔记(一)
    Canvas基础学习(一)——实现简单时钟显示
    常用排序算法之JavaScript实现
    NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证
    浏览器基础知识
    学习Vim 全图解释
  • 原文地址:https://www.cnblogs.com/shanquan2/p/3176372.html
Copyright © 2011-2022 走看看