• 【luogu1854】 花店橱窗布置 [动态规划]


    1854 花店橱窗布置

    把图画出来 一眼看过去就特别像走矩阵取数 然后我们就这样做

    但是要注意它的位置有限制 一个花束i可取的花瓶位置j在i~v-n+i之间

    然后就是记录路径

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    #define Max(x,y) (x)>(y)?(x):(y)
    #define Min(x,y) (x)>(y)?(y):(x)
    #define ll long long
    #define rg register
    const int N=200+5,M=100000+5,inf=0x3f3f3f3f,P=99999997;
    int n,m,a[N][N],f[N][N],pre[N][N],ay=1;
    bool vis[N];
    template <class t>void rd(t &x){
        x=0;int w=0;char ch=0;
        while(!isdigit(ch)) w|=ch=='-',ch=getchar();
        while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
        x=w?-x:x;
    }
    
    void print(int x,int y){
        if(pre[x][y]==y) {printf("%d ",y);return;}
        print(x-1,pre[x][y]);
        printf("%d ",y);
    }
    
    int main(){
        //freopen("in.txt","r",stdin);
        rd(n),rd(m);
        for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j) rd(a[i][j]),a[i][j]+=M;
        for(int i=1;i<=m-n+1;++i) f[1][i]=a[1][i],pre[1][i]=i;
        for(int i=2;i<=n;++i)
        for(int j=i;j<=m-n+i;++j)
        for(int k=1;k<j;++k)
            if(f[i-1][k]+a[i][j]>f[i][j])
                f[i][j]=f[i-1][k]+a[i][j],pre[i][j]=k;
        for(int i=n;i<=m;++i) if(f[n][ay]<f[n][i]) ay=i;
        printf("%d
    ",f[n][ay]-M*n);
        print(n,ay);
        return 0;
    }
     
  • 相关阅读:
    StringUtils
    改变windows锁屏时间
    data-toggle和data-target
    Bootstrap元素居中
    爬虫软件/程序
    nfs服务器搭建
    浏览器控制台console对象的使用
    F7
    Ubuntu18.04 安装Docker【转】
    mysql出现ERROR1698(28000):Access denied for user root@localhost错误解决方法【转】
  • 原文地址:https://www.cnblogs.com/lxyyyy/p/11181509.html
Copyright © 2020-2023  润新知