AT_abc322_e [ABC322E] Product Development 题解
这不比 D 好写?这不比 D 好写?这不比 D 好写?这不比 D 好写?
为五个属性的值的结果,显然的类似背包转移一下就好了。
#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;
}

浙公网安备 33010602011771号