zoukankan      html  css  js  c++  java
  • n*m物品取若干件附代价问最少代价(dp)

    题:https://ac.nowcoder.com/acm/contest/6877/A

    题意:店每天有m个物品,每个物品都有代价c,现有n天,你每天要用一件。问要如何购买代价最小。且在一天中购买k件会增加代价k^2。

    分析:设dp[i][j]表示第 i 天购买了 j 个物品的最小代价,dp[i][j]可由前i-1天买了x个物品(x<=j)加上第 i 天买了j-x个物品转化而来。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define pb push_back
    #define lson root<<1,l,midd
    #define rson root<<1|1,midd+1,r
    const int inf=0x3f3f3f3f;
    const ll INF=1e18;
    const int M=305;
    const int mod=998244353;
    ll a[M][M],dp[M][M];
    int main(){
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++)
                scanf("%lld",&a[i][j]);
            sort(a[i]+1,a[i]+1+m);
            for(int j=1;j<=m;j++)
                a[i][j]+=a[i][j-1];
        }
        memset(dp,0x3f,sizeof(dp));
        dp[0][0]=0;
        for(int i=1;i<=n;i++)
            for(int j=i;j<=min(n,i*m);j++){
                for(int k=0;k<=j&&k<=min(n,(i-1)*m);k++)
                    dp[i][j]=min(dp[i][j],dp[i-1][k]+a[i][j-k]+(j-k)*(j-k));
            }
        printf("%lld
    ",dp[n][n]);
        return 0;
    }
    View Code
  • 相关阅读:
    onclick中的函数的参数this
    classList的使用
    设置点击鼠标时不跳转
    模块补充shutil,logging
    re模块拾遗和递归函数
    正则表达式-re模块
    软件开发规范
    自定义模块2
    常用模块
    初识自定义模块
  • 原文地址:https://www.cnblogs.com/starve/p/13438317.html
Copyright © 2011-2022 走看看