zoukankan      html  css  js  c++  java
  • 和谐宿舍2

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=100+10;
    //开新木板不一定要刚好一样大,可以比i大
    //不开的情况不考虑,因为开了的情况因为开的大小由最大值确定,所以包含了不开的情况
    //他给的测试数据有迷惑性
    //这个题根据经验想到了要枚举,在根据数据发现可以多开 => 枚举最后一个木板包含的数目,并用最大值开那个木板
    //可以多枚举,反正取最大值,只要合法,比如不确定某个值,那就合法枚举然后max,因为无法确定i-1的最优情况的
    int n,dp[maxn][maxn],a[maxn],k,s[maxn][maxn];
    int main() {
        cin>>n>>k;
        memset(dp,0x3f, sizeof(dp));
        for(int i=1;i<=n;i++) cin>>a[i];
        //获得区间内的最大值
        for(int i=1;i<=n;i++){
            int m=0;
            for(int j=i;j<=n;j++){
                m=max(m,a[j]);
                s[i][j]=m;
            }
        }
        //初始化一个木板的情况,因为一个木板的情况要开
        for(int i=0;i<=n;i++) dp[i][0]=dp[0][i]=0;
        for(int i=1;i<=n;i++) dp[i][1]=s[1][i]*i;
        for(int i=2;i<=n;i++){
            for(int j=2;j<=k;j++){
                for(int p=1;p<i;p++){
                    dp[i][j]=min(dp[i][j],dp[p][j-1]+s[p+1][i]*(i-p));
                }
            }
        }
        cout<<dp[n][k]<<endl;
        return 0;
    }
  • 相关阅读:
    mysql多表关系
    mysql支持的数据类型
    数据库基本操作
    线程基础
    生产者和消费者模型
    并发编程一
    元类
    linux 关机/重启命令
    linux前后台任务切换
    centos7最小化安装后,yum安装pstree及mlocate
  • 原文地址:https://www.cnblogs.com/MorrowWind/p/13056322.html
Copyright © 2011-2022 走看看