C-连锁商店

 DP

只存在一个或零个景点的公司可以不需要考虑,只需要考虑有多个景点的公司就可以了,也只需要存储这类公司的状态。

#include<iostream>
#include<vector>
#include<string.h>

using namespace std;

long long n;
vector<long long> g[8000];
long long c[8000],w[8000],t[8000],cn[8000],ss[8000],id[8000],ll[8000][8000];

long long ct(long long x) 
{
	long long sum=0;
	for(int i=1; i<=n; i++) 
	{
		if(x%2!=0)
			sum+=w[ss[i]];
		x>>=1;
	}
	return sum;
}

long long fw(long long x) 
{
	if(cn[c[x]]>=2) 
	    return 0;
	return w[c[x]];
}

int main() 
{
	long long m,s,cnt=0;
	
	ios::sync_with_stdio(false);
	
	cin>>n>>m;
	
	for(int i=1;i<=n;i++) cin>>c[i];
	for(int i=1;i<=n;i++) cin>>w[i];
	
	for(int i=1;i<=m;i++) 
	{
		long long x, y;
		cin>>x>>y;
		g[x].push_back(y);
	}
	
	for(int i=1;i<=n;i++) 
	    cn[c[i]]++;
	
	for(int i=1;i<=n;i++) 
	    if(cn[i]>=2) 
		    ss[++cnt]=i,id[i]=cnt;
		    
	for(int i=1;i<=n;i++) 
	    t[i]=fw(i);
	
	
	memset(ll,-1,sizeof(ll));
	
	if(t[1]) 
	    ll[0][1]=t[1];
	else 
	    ll[1<<(id[c[1]]-1)][1]=ll[0][1]=0;
	    
	s=(1<<cnt);
	
	for(int k=0;k<s;k++) 
	{
		for(int i=1;i<=n;i++) 
		{
			if(ll[k][i]==-1) 
			    continue;
			for (int j=0;j<(int)g[i].size();j++) 
			{
				long long y=g[i][j];
				if(t[y]) 
				{
					ll[k][y]=max(ll[k][y], ll[k][i]+t[y]);
				} 
				else 
				{
					long long tt=(1<<(id[c[y]]-1));
					ll[tt|k][y]=max(ll[tt|k][y],ll[k][i]);
				}
			}
		}
	}
	
	for(int i=1;i<=n;i++) 
	{
		long long ans=0;
		for (int j=0;j<s;j++) 
		{
			if(ll[j][i]!=-1) 
			    ans=max(ans,ll[j][i]+ct(j));
		}
		
		cout<<ans<<endl;
		
	}
	
	return 0;
	
}

连锁商店管理系统是一个用于管理多个连锁商店的软件系统。下面是一个简化的连锁商店管理系统的类图示例: 类图中包含以下几个主要的类和它们之间的关系: 1. 商店(Store)类:表示一个具体的商店,包含商店的名称、地址等属性,以及管理商品和订单的方法。 2. 商品(Product)类:表示商店中的商品,包含商品的名称、价格、库存等属性。 3. 订单(Order)类:表示商店的订单,包含订单号、下单时间、总金额等属性,以及处理订单的方法。 4. 客户(Customer)类:表示商店的客户,包含客户的姓名、联系方式等属性。 5. 支付(Payment)类:表示订单的支付方式,包含支付方式的类型、支付金额等属性。 6. 库存(Inventory)类:表示商店的库存,包含商品和对应的库存数量。 7. 促销活动(Promotion)类:表示商店的促销活动,包含活动的名称、开始时间、结束时间等属性。 8. 员工(Employee)类:表示商店的员工,包含员工的姓名、职位等属性。 9. 系统管理员(Admin)类:表示系统的管理员,具有管理商店、员工等功能。 10. 关联关系:商店与商品之间存在关联关系,一个商店可以拥有多个商品;商店与订单之间存在关联关系,一个商店可以有多个订单;订单与客户之间存在关联关系,一个订单对应一个客户;订单与支付方式之间存在关联关系,一个订单可以有多种支付方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值