Pagini recente » Cod sursa (job #1602144) | Cod sursa (job #2293899) | Cod sursa (job #3317066)
#include <fstream>
#include <vector>
#define NMAX 17
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
int N,G;
vector<int> w(NMAX);
vector<pair<int,int>> dp(1<<NMAX);
/// dp[masca].first=nr min de camioane pt masca
/// dp[masca].second= capacitatea inca disponibila a ultimului camion
void citire()
{
fin>>N>>G;
for(int i=0; i<N; i++)
{
fin>>w[i];
}
}
int main()
{
for(int q=1; q<=3; q++)
{
citire();
for(int masca=0; masca<(1<<N); masca++)
{
dp[masca].first=N+1;
dp[masca].second=0;
}
dp[0]={1,0};
for(int masca=0; masca<(1<<N); masca++)
{
for(int i=0; i<N; i++)
{
if(!(masca&(1<<i))) /// nu am transportat blocul i
{
if(dp[masca].second+w[i]<=G)
{
dp[masca|(1<<i)]=min(dp[masca|(1<<i)],{dp[masca].first,dp[masca].second+w[i]});
}
else
{
dp[masca|(1<<i)]=min(dp[masca|(1<<i)],{dp[masca].first+1,w[i]});
}
}
}
}
fout<< dp[(1<<N)-1].first << "\n";
}
return 0;
}