Pagini recente » Cod sursa (job #1492200) | Cod sursa (job #799151) | Cod sursa (job #2755606) | Cod sursa (job #279803) | Cod sursa (job #2693510)
#include <iostream>
#include <fstream>
using namespace std;
int m,n,s[100],k,as,ev,H,S=0;
struct cuburi{int l;char c;};
cuburi v[100];
ofstream g("out.txt");
void tipar()
{
int i;
for(i=1;i<=k;i++)
g<<v[s[i]].l<<v[s[i]].c<<"\n";
S=S-v[s[k]].l;
g<<"\n";
g<<"\n";
}
int solutie()
{
return (S==H);
}
void citire()
{
ifstream f("in.in");
f>>n;
f>>H;
int i;
for(i=1;i<=n;i++)
{
f>>v[i].l>>v[i].c;
}
}
int succesor()
{
if(s[k]<n)
{
s[k]++;
return 1;
}
else
S=S-v[s[k-1]].l;
return 0;
}
int valid()
{
int i;
for(i=1;i<k;i++)
{
if(v[s[k-1]].l<v[s[k]].l)
return 0;
if((v[s[k-1]].c==v[s[k]].c)||(s[i]==s[k]))
return 0;
}
if(S+v[s[k]].l<=H)
{
S=S+v[s[k]].l;
return 1;
}
else
return 0;
}
void bt()
{
k=1;
s[k]=0;
while(k>0)
{
as=1;ev=0;
while(as&&!ev)
{
as=succesor();
if(as)
ev=valid();
}
if(as)
{
if(solutie())
tipar();
else
{
k++;
s[k]=0;
}
}
else
k--;
}
}
int main()
{
citire();
bt();
return 0;
}