zoukankan      html  css  js  c++  java
  • [USACO19OPEN]Snakes

    题目链接

    题目简介:有n组,每组有若干个蛇的蛇队伍。(也可以理解为n条长度若干的蛇。)我们要用网捕捉,中途可以改变网的大小。目标是浪费空间最小。

    解法:首先明确方法:DP。设f[i][t]为捕捉了n条,变换了t次的最小浪费空间。直接求浪费可能稍显麻烦,但是 浪费空间+必要空间=总空间,所以说求浪费空间就直接用 总-必就行了。

              那么什么是必要空间呢,即每条蛇的长度。要求一群蛇的总长度,就利用前缀和。

       那什么是总空间呢?为了使空间最小,同时又能抓蛇,所以我们追求 刚好能抓 的情况,也就是 最大蛇长*蛇数。


    预处理:一段范围内的最大值与前缀和

    动态转移方程:f[i][t]=min(f[i][t],f[p][t-1]+maxx[p+1][i]*(i-p)-sum[i]+sum[p]);

           p为枚举的,在第p条蛇变换后从p一直网到第i条的意义

    代码

    #include<iostream>
    #include<cstdio>
    #include<fstream>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    int read(){
        char ch;
        int res=0,f=1;
        ch=getchar();
        while(ch<'0'||ch>'9'){
            if(ch=='-')f=-1;
            ch=getchar();
        }
        while(ch>='0'&&ch<='9'){
            res=res*10+(ch-'0');
            ch=getchar();
        }
        return res*f;
    }
    int u=1<<30;
    int n,k,a[405],f[405][405],maxn,sum[405],maxx[405][405];
    int main(){
        memset(f,127/3,sizeof(f));
        n=read();
        k=read();
        for(int i=1;i<=n;++i){
            a[i]=read();
            maxn=max(maxn,a[i]);
            sum[i]=sum[i-1]+a[i];
            maxx[i][i]=a[i];
        }
        for(int i=1;i<=n;++i){
            for(int j=i+1;j<=n;++j){
                maxx[i][j]=max(maxx[i][j-1],maxx[j][j]);
            }
        }
        for(int i=1;i<=n-k;++i)f[i][0]=maxx[1][i]*i-sum[i];
        for(int t=1;t<=k;++t){
            for(int i=t+1;i<=n-(k-t);++i){
                for(int p=t;p<i;++p){
                    f[i][t]=min(f[i][t],f[p][t-1]+maxx[p+1][i]*(i-p)-sum[i]+sum[p]);
                }
            }
        }
        printf("%d",f[n][k]);
        return 0;
    }
  • 相关阅读:
    vs 2015 "加载该页时出错。" 解决方案
    Web API使用HttpResponseMessage与HttpResponseException的差异 HttpResponseMessage 返回类型
    a标签使用href=”javascript:void(0); 在火狐浏览器跟chrome 不兼容
    SQL语句 转
    Fiddler抓包 截包伪造提交包
    图片懒加载
    dropzone 上传插件
    MVC5+EF6 完整教程 转
    用Aspose.Cell控件导入Excel非强类型的数据
    利用Aspose.Word控件实现Word文档的操作
  • 原文地址:https://www.cnblogs.com/clockwhite/p/11181403.html
Copyright © 2011-2022 走看看