首页 > 其他分享 >P10156(dp思想)

P10156(dp思想)

时间:2024-02-27 10:03:11浏览次数:19  
标签:思想 5005 long len 绝对值 P10156 dp1 dp

难度2

也是比较有意思的一道题。首先发现每个小团体独立,所以对于每个小团体分开直接暴力dp,dp[i][j]表示当前小团体做到第i人,走了j人,然后O(n)转移,加上部分分喜提50pts。为什么要O(n)转移呢,因为我要枚举匹配的两个人然后算贡献。但是对于这种带绝对值的贡献,我们一般都要把绝对值拆掉。拆的方式有两种,一种是像这个这个一样进行分类讨论,还有就是像这个可以用一些特殊的做法保证绝对值内部的正负性从而消掉绝对值。

我们发现绝对值的正负只和i,j的相对位置有关,我们只需保证i<j或i>j也就是正着做或反着做,我选择正着做,绝对值处理完了,发现还是要O(n)转移怎么办。我们把式子拆开,发现i,j没关系了,自然想到dp[i][j][0/1],表示前i个人走j个人,是否有剩的。代码写起来不难。

#include<bits/stdc++.h>
using namespace std;
long long n,m,kk,x,y,a[5005],b[5005][5005],len[5005]; 
long long minn[5005],dp1[5005][5005],dp[5005][5005][2];//前i个人走j个人,有剩的 
int main(){
	ios::sync_with_stdio(false);cin.tie(0);
	memset(dp,0x3f,sizeof(dp));
	memset(dp1,0x3f,sizeof(dp1));
	dp1[0][0]=0;
	cin>>n>>m>>kk>>x;
	m=n-m;
	if(m%2==1) m++;
	for(long long i=1;i<=n;i++){
		cin>>a[i];
	}for(long long i=1;i<=n;i++){
		cin>>y;
		len[y]++;
		b[y][len[y]]=i;
	}
	for(long long i=1;i<=kk;i++){
		if(len[i]>=2){
			for(int j=0;j<=len[i];j++){
				for(int k=0;k<=len[i];k++){
					dp[j][k][0]=dp[j][k][1]=1e16;
				}
			}
			dp[1][0][1]=a[b[i][1]]-x*b[i][1];
			dp[1][0][0]=0;
			for(int j=2;j<=len[i];j++){
				dp[j][0][0]=dp[j-1][0][0];
				dp[j][0][1]=min(dp[j-1][0][1],a[b[i][j]]-x*b[i][j]);
				for(int k=2;k<=len[i];k+=2){
					dp[j][k][0]=min(dp[j-1][k-2][1]+a[b[i][j]]+x*b[i][j],dp[j-1][k][0]);
					dp[j][k][1]=min(dp[j-1][k][1],dp[j-1][k][0]+a[b[i][j]]-x*b[i][j]);
				}
			}
			memset(minn,0x3f,sizeof(minn));
			for(long long j=2;j<=len[i];j+=2){
				for(long long k=j;k<=len[i];k++){
					minn[j]=min(minn[j],dp[k][j][0]);
				}
			}
			minn[0]=0;
			dp1[i][0]=0;
			for(long long j=0;j<=len[i];j+=2){
				for(long long k=j;k<=m;k+=2){
					dp1[i][k]=min(dp1[i][k],dp1[i-1][k-j]+minn[j]);
				}
			}
		}else{
			for(long long j=0;j<=m;j+=2){
				dp1[i][j]=dp1[i-1][j];
			}
		}
	}
	if(dp1[kk][m]>1e14) cout<<"Impossible"<<endl;
	else cout<<dp1[kk][m];
	
	return 0;
}/*
7
5 3 2 1 6 4 7
*/

标签:思想,5005,long,len,绝对值,P10156,dp1,dp
From: https://www.cnblogs.com/wuhupai/p/18036254

相关文章

  • CF1928C (数学思想)
    难度3其实是有点虚高的,可能是我这种数学题做的少了。在考试时式子都写出来了,但不知道怎么处理。然后注意一下细节就可以了。懒懒懒。对于xy=k(k为常数)可以直接枚举k的因子,然后看一下限制条件即可。#include<bits/stdc++.h>usingnamespacestd;longlongT,n,x,tot=0;unorde......
  • P6805 (树上最小路径覆盖思想)
    难度3比较有意思的一道题。首先看到题目是求树上最小路径覆盖,自然想到由叶子入手去分析,所以当子树内有偶数个叶子节点时,那么就有两个叶子向上匹配,否则只有一个叶子向上匹配。这个东西可以用树剖维护,线段树维护的是子树内有多少个偶的,相当于一个区间反转一类的东西。细节不算多,但......
  • P1240+P1350+ AT_abc282_g得出的一些dp技巧
    在遇到一些题目在设状态时,前面的状态对后面的有影响,比如在P1240和P1350中前面的放置会对后面的有影响,正常的状态是不行的。以前可能考虑状态压缩,但现在我们可以通过发现前面状态的一些共性,比如在P1240+P1350中前面放了k个車那么一定有k行被占用,所以就不用记录之前那些行被占用了。......
  • P4666 [BalticOI 2011 Day1] Growing Trees题解(平衡树思想)
    自己第一道不看题解写出来的紫题,庆祝一下(没初始化种子导致调了30min)这是一个fhq-treap的题解思路来源:首先看题目,因为是序列上的问题,不难想到是一道数据结构题。首先看到操作C:对于这种操作,我们可以用平衡树解决,具体方法是,将树split成\(<min,min\lex\lemax,>max\)这......
  • 【学习笔记】树型DP学习笔记
    学习笔记索引省流:被吊打了自己开的一个坑,死也要填完它。希望我随手写下的笔记对您的学习有所帮助(也不太可能)。更改日志2024/01/08:开坑,写了树的直径和换根DP,写不动了(((2024/01/08晚上:更新了最小点覆盖和最大独立集,看来精神还可以,顶着明天做手术的风险2024/01/09:修改错误+增补......
  • Exception in thread "xxl-job, admin JobRegistryMonitorHelper-registryOrRemoveThr
    这个问题集合遍历修改了集合结构,这样是不被允许的,需要换种方式报错示意图 第一可以采用for(inti=0;i<registryList.size();i++)解决第二采用迭代处理Iterator<XxlJobRegistry>iterator=registryList.iterator();while(iterator.hasNext()){XxlJobRegist......
  • 519-基于ZU19EG的4路100G 网络 DPU的PCIe 加速计算卡 高速信号处理卡 ZU19EG处理板 高
    基于ZU19EG的4路100G网络DPU的PCIe加速计算卡  一、板卡概述   本板卡系北京太速科技自主设计研发,基于Xilinx公司ZynqUltraScale+MPSOC系列SOCXCZU19EG-FFVC1760架构,支持PCIEGen3x16模式。其中,ARM端搭载一组64-bitDDR4,总容量达4GB,可稳定运行在2400MT/s,PL端支......
  • 漂亮网格(DP)
    第2题   漂亮网格 查看测评数据信息n行m列的二维网格,每个格子要么是'.',要么是'#',其中'.'表示白色格子,'#'表示黑色格子。从上往下,行的编号是1至n。从左往右,列的编号是从1至m。网格被称为"漂亮网格",当且仅当同时满足如下的两个条件:1、对于任意的1<=i<=n, 1<=j<=m,如果......
  • Rockchip RK3399 - DRM edp驱动程序
    ----------------------------------------------------------------------------------------------------------------------------开发板:NanoPC-T4开发板eMMC:16GBLPDDR3:4GB显示屏:15.6英寸HDMI接口显示屏u-boot:2023.04linux:6.3----------------------------------......
  • Part3: Dive into DDPM
    背景整个系列有相对完整的公式推导,若正文中有涉及到的省略部分,皆额外整理在Part4,并会在正文中会指明具体位置。在Part2基于\(\text{VariationalInference}\),找到原目标函数\(-\ln{p_\theta(x_0)}\)的上界\(L\),定义如下:\[\begin{aligned}L:=&\mathbb{E}_q\left[-\log\frac......