Uradio sam zadatak, al nece da compailira. Neznam docega bi moglo biti. Pa bi zamolio nekoga da mi pomogne.
Evo i koda:
#include<iostream>
#include<cstdio>
using namespace std;
#define GO continue;
#define STOP system("pause");
using namespace std;
int n,m,sum,max,s,d;
int prevJ;
string piece[5];
string name[10];
int nameV[10],value[10];
bool ima[10];
int interI[10],interJ[10];
void nadi(string rijec)
{
int a,b,c,f;d=0;
for(f=0;f<10;f++)interI[f]=interJ[f]=100;
for(a=0;a<rijec.length();a++)
for(b=1;b<rijec.length()-a;b++)
for(c=0; c<m; c++){
if(rijec.substr(a,b)==name[c])
{
interI[d]=a+1;
value[d]=nameV[c];
interJ[d]=b+a;
d++;
} }
}
inline int sumiraj()
{
sum=0;
int i,j;
if(interI[0]==100)return 0;
prevJ=interJ[0];
sum+=value[0];
for(i=1;i<d;i++)
{
if(interI[i]<=prevJ){
if(value[i]>value[i-1])
{sum+=value[i];sum-=value[i-1];GO;}
}
else{
sum+=value[i];GO;}
prevJ=interJ[i];
}
return sum;
}
void twopiece()
{
nadi(piece[0]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
printf("%d\n",::max);//STOP;
}
void threepiece()
{
nadi(piece[0]+piece[1]+piece[2]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[0]+piece[2]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[2]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[0]+piece[2]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[2]+piece[1]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[2]+piece[0]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
printf("%d\n",::max);//STOP;
}
void fourpiece()
{
nadi(piece[0]+piece[1]+piece[2]+piece[3]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[0]+piece[1]+piece[3]+piece[2]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[0]+piece[2]+piece[1]+piece[3]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[0]+piece[2]+piece[3]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[0]+piece[3]+piece[1]+piece[2]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[0]+piece[3]+piece[2]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[0]+piece[2]+piece[3]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[0]+piece[3]+piece[2]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[3]+piece[0]+piece[2]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[3]+piece[2]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[2]+piece[0]+piece[3]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[2]+piece[3]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[2]+piece[0]+piece[1]+piece[3]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[2]+piece[0]+piece[3]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[2]+piece[1]+piece[0]+piece[3]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[2]+piece[1]+piece[3]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[2]+piece[3]+piece[0]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[2]+piece[3]+piece[1]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[3]+piece[1]+piece[0]+piece[2]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[3]+piece[1]+piece[2]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[3]+piece[2]+piece[0]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[3]+piece[2]+piece[1]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[3]+piece[2]+piece[0]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[3]+piece[2]+piece[1]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
printf("%d\n",::max);//STOP;
}
int main( void )
{
//ifstream in("dat.txt");
int i;
cin>>n;
for(i=0;i<n;i++)cin>>piece[i];
cin>>m;
for(i=0;i<m;i++){cin>>name[i]>>nameV[i];};
if(n==2)twopiece();
else if(n==3)threepiece();
else if(n==4)fourpiece();
else{
nadi(piece[0]);
sumiraj();
printf("%d\n",sum);STOP;
}
return 0;
}
Evo i koda:
#include<iostream>
#include<cstdio>
using namespace std;
#define GO continue;
#define STOP system("pause");
using namespace std;
int n,m,sum,max,s,d;
int prevJ;
string piece[5];
string name[10];
int nameV[10],value[10];
bool ima[10];
int interI[10],interJ[10];
void nadi(string rijec)
{
int a,b,c,f;d=0;
for(f=0;f<10;f++)interI[f]=interJ[f]=100;
for(a=0;a<rijec.length();a++)
for(b=1;b<rijec.length()-a;b++)
for(c=0; c<m; c++){
if(rijec.substr(a,b)==name[c])
{
interI[d]=a+1;
value[d]=nameV[c];
interJ[d]=b+a;
d++;
} }
}
inline int sumiraj()
{
sum=0;
int i,j;
if(interI[0]==100)return 0;
prevJ=interJ[0];
sum+=value[0];
for(i=1;i<d;i++)
{
if(interI[i]<=prevJ){
if(value[i]>value[i-1])
{sum+=value[i];sum-=value[i-1];GO;}
}
else{
sum+=value[i];GO;}
prevJ=interJ[i];
}
return sum;
}
void twopiece()
{
nadi(piece[0]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
printf("%d\n",::max);//STOP;
}
void threepiece()
{
nadi(piece[0]+piece[1]+piece[2]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[0]+piece[2]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[2]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[0]+piece[2]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[2]+piece[1]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[2]+piece[0]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
printf("%d\n",::max);//STOP;
}
void fourpiece()
{
nadi(piece[0]+piece[1]+piece[2]+piece[3]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[0]+piece[1]+piece[3]+piece[2]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[0]+piece[2]+piece[1]+piece[3]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[0]+piece[2]+piece[3]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[0]+piece[3]+piece[1]+piece[2]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[0]+piece[3]+piece[2]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[0]+piece[2]+piece[3]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[0]+piece[3]+piece[2]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[3]+piece[0]+piece[2]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[3]+piece[2]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[2]+piece[0]+piece[3]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[1]+piece[2]+piece[3]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[2]+piece[0]+piece[1]+piece[3]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[2]+piece[0]+piece[3]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[2]+piece[1]+piece[0]+piece[3]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[2]+piece[1]+piece[3]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[2]+piece[3]+piece[0]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[2]+piece[3]+piece[1]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[3]+piece[1]+piece[0]+piece[2]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[3]+piece[1]+piece[2]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[3]+piece[2]+piece[0]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[3]+piece[2]+piece[1]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[3]+piece[2]+piece[0]+piece[1]);
s=sumiraj();if(::max<s)::max=s;
nadi(piece[3]+piece[2]+piece[1]+piece[0]);
s=sumiraj();if(::max<s)::max=s;
printf("%d\n",::max);//STOP;
}
int main( void )
{
//ifstream in("dat.txt");
int i;
cin>>n;
for(i=0;i<n;i++)cin>>piece[i];
cin>>m;
for(i=0;i<m;i++){cin>>name[i]>>nameV[i];};
if(n==2)twopiece();
else if(n==3)threepiece();
else if(n==4)fourpiece();
else{
nadi(piece[0]);
sumiraj();
printf("%d\n",sum);STOP;
}
return 0;
}