Pagini recente » Cod sursa (job #2214529) | Cod sursa (job #1505020) | Cod sursa (job #2157007) | Cod sursa (job #497739) | Cod sursa (job #1446197)
#include <fstream>
#include <string.h>
#define INF 2100000000000
#define dim 102
using namespace std;
ifstream fin("zmeu.in");
ofstream fout("zmeu.out");
int C[dim][dim],P[dim][dim],n,p,i,j,l,k,t;
unsigned int dp[2][dim][1002],Min;
int main()
{
fin>>n>>p;
Min=1ll*INF;
for(i=0;i<=1;i++)
for(j=0;j<=n;j++)
for(t=0;t<=p;t++)
dp[i][j][t]=INF;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
fin>>P[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
fin>>C[i][j];
for(i=1;i<=n;i++)
dp[0][i][0]=0;
dp[!l][1][0]=C[1][1];
dp[!l][1][P[1][1]]=0;
for(t=1;t<=n;t++)
{
l=!l;
for(j=1;j<=n;j++)
{
for(k=0;k<=p;k++)
{
if(dp[!l][j][k]!=INF&&t>1)
{
dp[l][j][k]=min(dp[l][j][k],dp[!l][j][k]+C[t][j]);
dp[l][j][k+P[t][j]]=min(dp[l][j][k+P[t][j]],dp[!l][j][k]);
}
if(dp[l][j-1][k]!=INF&&j>1)
{
dp[l][j][k]=min(dp[l][j][k],dp[l][j-1][k]+C[t][j]);
dp[l][j][k+P[t][j]]=min(dp[l][j-1][k],dp[l][j][k+P[t][j]]);
}
dp[!l][j][k]=INF;
}
}
}
for(i=0;i<=p;i++)
if(Min>dp[l][n][i])
Min=dp[l][n][i];
fout<<Min;
return 0;
}