首页 > 其他分享 >【模板】状压DP

【模板】状压DP

时间:2024-11-21 12:39:45浏览次数:1  
标签:DP int LL 状压 模板 tt dp

**[POI2004]PRZ**

**考察内容:二进制子集遍历,DP转移**

#include <bits/stdc++.h>
using namespace std;

int n,W;
struct data1 {
	int t,w;
}a[20];

int dp[(1<<20)],tt[(1<<20)],ww[(1<<20)];

int main() {
	scanf("%d%d",&W,&n);
	for(int i=1;i<=n;i++) {
		scanf("%d%d",&a[i].t,&a[i].w);
	}
	
	int lim=(1<<n);
	for(int i=0;i<lim;i++) {
		for(int j=0;j<n;j++) {
			if((i>>j)&1) {
				tt[i]=max(tt[i],a[n-j].t);
				ww[i]+=a[n-j].w;
			}
		}
	}
	
	memset(dp,0x3f,sizeof dp);
	dp[0]=0;
	
	for(int i=0;i<lim;i++) {
		for(int j=i;j>=0;j=i&(j-1)) {
			if(ww[i^j]<=W) {
				dp[i]=min(dp[i],dp[j]+tt[i^j]);
			}
			if(!j) break;	
		}
	}
	printf("%d",dp[lim-1]);
	return 0;
}
**互不侵犯**

**考察内容:状态矛盾处理,DP转移**

#include <bits/stdc++.h>
using namespace std;
#define LL long long
int n,k;
LL dp[10][(1<<10)][100];

bool checkself(int x) {
	if((x<<1) & x) return 0;
	else return 1;
}

bool check(int x,int y) {
	if(x & y) return 0;
	else if((x<<1) & y) return 0;
	else if((x>>1) & y) return 0;
	else return 1;
}

int main() {
	scanf("%d%d",&n,&k);
	dp[0][0][0]=1;
	for(int i=1;i<=n;i++)
	{
		for(int x=0;x<(1<<n);x++)
		{
			if(!checkself(x)) continue;
			for(int y=0;y<(1<<n);y++) 
			{
				if(!checkself(y)) continue;
				if(check(x,y)) 
				{
					int numx=__builtin_popcount((unsigned)x);
					for(int j=k;j>=numx;j--) {
						dp[i][x][j]+=dp[i-1][y][j-numx];
					}
				}
			}	
		}
	}
	LL ans=0;
	for(int i=0;i<(1<<n);i++) {
		ans+=dp[n][i][k];
//		printf("%d ",dp[n][i][k]);
	}
	printf("%lld",ans);
	return 0;
}

标签:DP,int,LL,状压,模板,tt,dp
From: https://www.cnblogs.com/UeesugiSakura/p/18560464

相关文章

  • 实验4 类的组合、继承、模板类、标准库
    实验2GradeCalc.hpp#include<iostream>#include<vector>#include<string>#include<algorithm>#include<numeric>#include<iomanip>usingstd::vector;usingstd::string;usingstd::cin;usingstd::cout;usingstd::en......
  • 实验4 类的组合、继承、模板类、标准库
    实验任务1task1_1.cpp#include<iostream>usingstd::cout;usingstd::endl;//类A的定义classA{public:A(intx0,inty0);voiddisplay()const;private:intx,y;};A::A(intx0,inty0):x{x0},y{y0}{}voidA::display()const{......
  • 模板代码设计工具
    项目地址:https://github.com/hkmadao/re_tcdt_rust.git目前流行低代码,无代码的开源项目,一定程度上可以帮组开发者减轻开发工作量,生成一些固定页面的功能,但是有较强的自定义需求时,使用起来还是有一定困难:只能按照低代码项目的框架去实现我们的目标项目代码模板比较固定,即使允许......
  • wordpress获取当前分类的顶级分类ID并调用子分类
    函数定义:在functions.php中定义一个函数来获取当前分类的顶级分类ID。代码示例://获取分类ID,函数参数是int类型为当前分类的IDfunctiontx_wp_get_category_root_id($cat){$this_category=get_category($cat);//获取当前分类的对象//循环往上获得父级分......
  • 【JavaSE】【网络编程】UDP数据报套接字编程
    目录一、网络编程简介二、Socket套接字三、TCP/UDP简介3.1有连接vs无连接3.2可靠传输vs不可靠传输3.3面向字节流vs面向数据报3.4双向工vs单行工四、UDP数据报套接字编程4.1API介绍4.1.1DatagramSocket类4.1.1.1构造方法4.1.1.2主要方法4.1.2DatagramP......
  • SSTI(模板注入)
    SSTI:SSTI(Server-SideTemplateInjection)即服务端模板注入,它是一种安全漏洞攻击技术。当应用程序在服务器端使用模板引擎来呈现动态生成的内容时,如果用户可以控制模板引擎的输入,就可能导致SSTI漏洞。服务端接收攻击者的恶意输入以后,未经任何处理就将其作为Web应用模板内......
  • C++ 模板元编程高级技巧与大型项目架构中的应用实践
    C++模板元编程(TemplateMetaprogramming,TMP)是一种利用C++模板在编译时进行计算和逻辑推理的技术。模板元编程可以极大地提升程序的灵活性、性能和可扩展性,尤其是在大型项目的架构中,能够有效地处理类型推导、优化计算和代码生成等任务。随着C++11、C++14、C++17和C++20......
  • 模板方法模式-java实战
    经典实现模板方法模式(TemplateMethodPattern)是一种行为型设计模式,它在父类中定义了一个算法的框架,允许子类在不改变算法结构的情况下重新定义算法的某些特定步骤。实现步骤:定义抽象类:这个类定义了算法的框架,包括模板方法和一些抽象方法。实现模板方法:模板方法定义了算......
  • 【设计模式】深入理解模板方法模式与策略模式(行为型模式)——写出更灵活的代码!
    全文目录:开篇语目录......
  • 实验4 类的组合、继承、模板类、标准库
     实验任务21#include<iostream>2#include<vector>3#include<string>4#include<algorithm>5#include<numeric>6#include<iomanip>78usingstd::vector;9usingstd::string;10usingstd::cin;......