AT_abc322_e [ABC322E] Product Development 题解

这不比 D 好写?这不比 D 好写?这不比 D 好写?这不比 D 好写?

fa,b,c,d,ef_{a,b,c,d,e} 为五个属性的值的结果,显然的类似背包转移一下就好了。

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

const int N = 105, MOD = 1e9 + 7; // Remember to change

int n, kk, p;

namespace FastIo
{
	#define QUICKCIN ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
	int read()
	{
		char ch = getchar();
		int x = 0, f = 1;
		while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
		while (ch == '-')
		{
			f = -f;
			ch = getchar();
		}
		while (ch >= '0' && ch <= '9')
		{
			x = (x << 1) + (x << 3) + (ch ^ 48);
			ch = getchar();
		}
		return x * f;
	}
	template<class T>
	void write(T x)
	{
		if (x < 0)
		{
			putchar('-');
			x = -x;
		}
		if (x > 9) write(x / 10);
		putchar(x % 10 + '0');
	}
	template<class T>
	void writeln(T x)
	{
		write(x);
		putchar('\n');
	}
}

long long dp[16][16][16][16][16];
long long ccc[N], g[N][N];

int main()
{
	ios::sync_with_stdio(0), cin.tie(nullptr), cout.tie(nullptr);
	cin>>n>>kk>>p;
	for(int i=1;i<=n;i++)
	{
		cin>>ccc[i];
		for(int j=1;j<=kk;j++) cin>>g[i][j];
	}
	memset(dp,0x7f, sizeof dp);
	long long ori=dp[0][0][0][0][0];
	dp[0][0][0][0][0]=0;
	for(int x=1;x<=n;x++)
	{
		for(int i=15;i>=0;i--)
		{
			for(int j=(kk>=2?15:0);j>=0;j--)
			{
				for(int k=(kk>=3?15:0);k>=0;k--)
				{
					for(int a=(kk>=4?15:0);a>=0;a--)
					{
						for(int b=(kk>=5?15:0);b>=0;b--)
						{
							int ni=i-g[x][1],nj=j-g[x][2],nk=k-g[x][3],na=a-g[x][4],nb=b-g[x][5];
							if(ni>=0&&nj>=0&&nk>=0&&na>=0&&nb>=0)
							{
								dp[i][j][k][a][b]=min(dp[i][j][k][a][b],dp[ni][nj][nk][na][nb]+ccc[x]);
							}
						}
					}
				}
			}
		}
	}
	long long ans=9e18;
	for(int i=0;i<=15;i++)
	{
		for(int j=(kk>=2?15:0);j>=0;j--)
		{
			for(int k=(kk>=3?15:0);k>=0;k--)
			{
				for(int a=(kk>=4?15:0);a>=0;a--)
				{
					for(int b=(kk>=5?15:0);b>=0;b--)
					{
						bool flag=1;
						if(kk>=1) flag&=(i>=p);
						if(kk>=2) flag&=(j>=p);
						if(kk>=3) flag&=(k>=p);
						if(kk>=4) flag&=(a>=p);
						if(kk>=5) flag&=(b>=p);
						if(flag) 
						{
							ans=min(ans, dp[i][j][k][a][b]);
						}
					}
				}
			}
		}
	}
	cout<<(ans==ori||ans==9e18?-1:ans)<<"\n";
	return 0;
}
posted @   HappyBobb  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示