#1716
KDS
Se consideră un șir de numere naturale a[1]
, a[2]
, …, a[n]
așezate circular. Acest lucru înseamnă că a[1]
are ca vecini numerele a[n]
și a[2]
, iar a[n]
are ca vecini pe a[n-1]
și a[1]
. Se consideră de asemenea un număr natural K
.
Să se determine suma maximă care se poate obține din exact K
secvențe nevide, disjuncte și ne-vecine.
Lot Juniori Focsani, 2016
Problema | KDS | Operații I/O |
kds.in /kds.out
|
---|---|---|---|
Limita timp | 0.5 secunde | Limita memorie |
Total: 16 MB
/
Stivă 16 MB
|
Id soluție | #33790760 | Utilizator | |
Fișier | kds.cpp | Dimensiune | 879 B |
Data încărcării | 09 Ianuarie 2022, 16:33 | Scor / rezultat | Eroare de compilare |
kds.cpp:1:9: warning: invalid suffix on literal; C++11 requires a space between literal and identifier [-Wliteral-suffix] #include<fstream>using namespace std;ifstream fin("kds.in");ofstream fout("kds.out");int N,K,a[10002], infinit=1000000000;int best[10002];int solve(int start, int stop, int ka){ int k, i, x, y, z, j, t, v; ///best[start-1]=infinit; t=infinit; for(i=start;i<=stop;i++){ if(a[i]<t)t=a[i]; best[i]=t; } for(k=2;k<=ka;k++){ j=start+2*k-4; x=best[j]; y=best[j+1]; t=infinit; for(i=j+2;i<=stop;i++){ z=best[i]; v=a[i]+x; if(v<t)t=v; best[i]=t; x=y; y=z; } } return best[stop];}int main(){ int i, S, v1, v2; fin>>N>>K; S=0; for(i=1;i<=N;i++){ fin>>a[i]; S=S+a[i]; } v1=a[1]+solve(3,N-1,K-1);//prima secventa il contine pe a[1] v2=solve(2,N,K);//a[1] nu face parte din nici o secventa fout<<S-min(v1,v2)<<" ^ kds.cpp:1:18: warning: extra tokens at end of #include directive [enabled by default] #include<fstream>using namespace std;ifstream fin("kds.in");ofstream fout("kds.out");int N,K,a[10002], infinit=1000000000;int best[10002];int solve(int start, int stop, int ka){ int k, i, x, y, z, j, t, v; ///best[start-1]=infinit; t=infinit; for(i=start;i<=stop;i++){ if(a[i]<t)t=a[i]; best[i]=t; } for(k=2;k<=ka;k++){ j=start+2*k-4; x=best[j]; y=best[j+1]; t=infinit; for(i=j+2;i<=stop;i++){ z=best[i]; v=a[i]+x; if(v<t)t=v; best[i]=t; x=y; y=z; } } return best[stop];}int main(){ int i, S, v1, v2; fin>>N>>K; S=0; for(i=1;i<=N;i++){ fin>>a[i]; S=S+a[i]; } v1=a[1]+solve(3,N-1,K-1);//prima secventa il contine pe a[1] v2=solve(2,N,K);//a[1] nu face parte din nici o secventa fout<<S-min(v1,v2)<<" ^ kds.cpp:2:1: warning: missing terminating " character [enabled by default] "; fout.close(); return 0;} ^ kds.cpp:2:1: error: missing terminating " character
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema KDS face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:
Suma punctajelor acordate pe testele utilizate pentru verificare este 100. Astfel, soluția ta poate obține cel mult 100 de puncte, caz în care se poate considera corectă.