首页 > 其他分享 >CF--787--G

CF--787--G

时间:2022-12-23 01:11:07浏览次数:39  
标签:787 const -- CF int dp

感觉是很经典的现实问题,原来是使用dp进行处理的。对每一个状态都定义一下子就好了

思路

可以逆序一下,这样子就变成递增,将问题进行合理转换
关键是状态转换的代价如何就算,这个需要讲究,其实是前缀和的差值
f(i,j,k)前面i个,选了j个,最后一个是k的最小代价
大致就是:确定dp转移的方程,然后确定转移的代价

代码

#include <bits/stdc++.h>
using namespace std;
const int M=255;
const int inf=0x3f3f3f3f;

int f[M][M][M],sum[M];

int main() {
    int n,m;cin>>n>>m;
    for(int i=n;i;i--)cin>>sum[i];
    for(int i=1;i<=n;i++)sum[i]=sum[i]+sum[i-1];
    memset(f,0x3f,sizeof(f));
    f[0][0][0]=0;
    for(int i=1;i<=n;i++)
        for(int j=0;j<=m;j++) {//这里枚举i-1的状态,因为是要从i-1转移过来
            int mn=inf;
            for(int k=0;j+k<=m;k++) {//i-1选多少个,i的最后一个选多少个,那么前i个选了多少也就是确定的
                mn=min(mn,f[i-1][j][k]);//比他小的人中找一个小的就可以了
                f[i][j+k][k]=mn+abs(sum[i]-j-k);
                //多了就给后面,少了就找后面要,这就是dp转移的代价
                
                //int mn=inf;
                //for(int l=0;l<=k;l++)
                //    mn=min(mn,f[i-1][j][l]);
                //f[i][j+k][k]=mn+abs(sum[i]-j-k);
                //每次在前面找一个最小的,其实这一个维度是可以省去的
            }
        }
    int ans=inf;
    for(int i=1;i<=m;i++)ans=min(ans,f[n][m][i]);
    cout<<ans;
    return 0;
}

标签:787,const,--,CF,int,dp
From: https://www.cnblogs.com/basicecho/p/16999878.html

相关文章

  • 单细胞数据 mkfastq | 10x Genomics
     除了刚接触10x的那会儿,还真没怎么亲自倒腾过fastq的制作。正常从测序商那里拿到的应该是bcl的原始数据,需要自己做一步bcl2fastq。后面大家都觉得这一步太麻烦了,没必要......
  • Using Python to Check If List of Words in String
    TocheckifalistofwordsisinastringusingPython,theeasiestwayiswithlistcomprehension.>>>list_of_words=["this","words","string"]>>>string=......
  • Arthas - 基本命令
     基本命令Dashboard   高级使用远程访问   异常解决端口被占用  ......
  • Xshell不能同时连接三台克隆虚拟机(只能连接一台)的解决办法
    今天把虚拟机克隆了之后,用xshell连接,准确来说,只能连接一台虚拟机一、首先检查三台虚拟机的网络连接是否正常打开VM,分别进入三台虚拟机桌面,右键打开终端,输入pingwww.baid......
  • Acwing 7. 混合背包问题
    Acwing7.混合背包问题有\(N\)种物品和一个容量是\(V\)的背包。物品一共有三类:第一类物品只能用\(1\)次(01背包);第二类物品可以用无限次(完全背包);第三类物品最多......
  • 组合模式javac++
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解组合模式的动机,掌握该模式的结构;2、能够利用组合模式解决实际问题。 [实验任务一]:组合模式用透明组合......
  • cf 189A Cut Ribbon
    cf189ACutRibbon题意:给一长度为\(n\)的钢条,要求将其剪成若干长度为\(p,q,r\)的短条,且短条数量尽可能多。裁出的长度只能是\(p,q,r\)不能有其他长度。要求恰......
  • 200015 计算柱的箍筋根数已知长高和加密区非加密区
    点击查看代码<?phpheader('Content-Type:text/html;charset=utf-8');define('ROOT',$_SERVER['DOCUMENT_ROOT']);includeROOT.'/assets/php/head.php';$tit='......
  • 查看用户或组名称
    因为是网络用户,所以设置里显示的是微软账户名称。而且我用的是Windows家庭版,打不开“本地用户和组”管理。  其实你的用户名称就是你用户文件夹的名称(在C:\Users\......
  • 记录hive一次数据倾斜问题的解决以及思考总结
    解决数据倾斜是大数据开发中比较重要的能力,这个现象指的是分布式集群中,由于数据分发的不当,导致某个节点要处理的错误过多,导致整个计算机任务迟迟结束不了,甚至可能节点出现O......