求调
查看原帖
求调
361141
_JF_殉情楼主2024/1/28 23:17
#include<bits/stdc++.h>
using namespace std;
#define int long long 
const int N =102;
int n,k,p,cnt,c[N],dp[300010],a[N][N],v[8];
int Quickpow(int a,int b){
	int ans=1,now=a;
	while(b>0){
		if(b&1)	ans*=now;
		now*=now;
		b>>=1;
	}
	return ans;
}
int Cal(int x,int dis){
	for(int i=k-1;i>=0;i--){
		int now=0,pre=Quickpow(6,i);
		while(x-pre>=0)	x-=pre,now++;
		if(now>5)	return -1;
		v[i]=min(p,now+a[dis][i]);	
//		cout<<pre<<" "<<i<<" "<<now<<" "<<a[pre][i]<<endl;
	}
	int sum=0;
	for(int i=0;i<k;i++)	sum+=Quickpow(6,i)*v[i];
	if(sum>300010)	return -1; 
	return sum;
}
signed main()
{
	cin>>n>>k>>p;
	for(int i=1;i<=n;i++){
		cin>>c[i];
		for(int j=0;j<k;j++)	cin>>a[i][j];
	}		
	for(int i=0;i<=(Quickpow(6,k)-1);i++)	dp[i]=1e16;
	dp[0]=0;
	for(int i=1;i<=n;i++){
		for(int j=(Quickpow(6,k)-1);j>=0;j--)
			if(Cal(j,i)!=-1)
				dp[Cal(j,i)]=min(dp[Cal(j,i)],dp[j]+c[i]);
	}
	cout<<((dp[(Quickpow(6,k)-1)]==1e16)?-1:dp[(Quickpow(6,k)-1)])<<endl;
	return 0;
}
/*
4 3 5
5 3 0 2
3 1 2 3
3 2 4 0
1 0 1 4
*/
2024/1/28 23:17
加载中...