Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- ifstream in("sclm.in");
- ofstream out("sclm.out");
- int n,a[3000],L[3000],urm[3000];
- int main(){
- int i,j;
- in>>n;
- for(i=1;i<=n;i++)
- in>>a[i];
- L[n]=1;
- urm[n]=-1;
- for(i=n-1;i>0;i--)
- {
- L[i]=1;
- urm[i]=-1;
- for(j=i+1;j<=n;j++)
- if(a[i]<=a[j]&&L[i]<L[j]+1)
- {
- L[i]=L[j]+1,
- urm[i]=j;
- }
- }
- int pmax=1;
- for(i=1;i<=n;i++)
- if(L[pmax]<L[i])
- pmax=i;
- out<<L[pmax]<<endl;
- for(i=pmax;i!=-1;i=urm[i])
- out<<i<<" ";
- return 0;
- }
- #include <iostream>
- #include <fstream>
- #include <cstring>
- using namespace std;
- ifstream in("lungimesubsircomunmaximal.in");
- ofstream out("lungimesubsircomunmaximal.out");
- int d[1003][1003];
- char s1[1003],s2[1003],rez[1003];
- int main()
- {
- int m,n,i,j,e;
- in>>s1>>s2;
- //daca citesti mil sugi
- n=strlen(s1);
- m=strlen(s2);
- for(i=1 ; i<=n ; i++)
- for(j=1 ; j<=m ; j++)
- if(s1[i-1]==s2[j-1])
- d[i][j]=d[i-1][j-1]+1;
- else
- d[i][j]=max(d[i-1][j],d[i][j-1]);
- out<<d[n][m];
- }
- #include <iostream>
- #include <algorithm>
- #include <fstream>
- using namespace std;
- ifstream f("plopi1.in");
- ofstream g("plopi1.out");
- int n,a[100000],L[100000];
- int main()
- {
- f>>n;
- for(int i=1;i<=n;i++)
- f>>a[i];
- L[n]=1;
- for(int i=n-1;i>0;i--)
- {
- L[i]=1;
- for(int j=i+1;j<=n;j++)
- if(a[i]>a[j] && L[i]<L[j]+1)
- L[i]=L[j]+1;
- }
- int pmax=1;
- for(int i=1;i<=n;i++)
- if(L[pmax]<=L[i])
- pmax=i;
- g<<n-L[pmax];
- }
- #include <bits/stdc++.h>
- using namespace std;
- const int mod = 666013;
- map<int, bool> M;
- map<int, int> poz;
- int aib[111][111111], x, n, K, res, cnt;
- inline void Update(int k, int poz, int val)
- {
- for (int i = poz; i <= n; i += i & -i)
- {
- aib[k][i] += val;
- if (aib[k][i] > mod)
- aib[k][i] -= mod;
- }
- }
- inline int Query(int k, int poz)
- {
- int s = 0;
- for (int i = poz; i > 0; i -= i & -i)
- {
- s += aib[k][i];
- if (s > mod)
- s -= mod;
- }
- return s;
- }
- int main()
- {
- ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
- cin >> n >> K;
- vector<int> v(n + 1);
- for (int i = 1; i <= n; ++i)
- cin >> v[i], M[v[i]] = true;
- for (const auto& p : M)
- poz[p.first] = ++cnt;
- for (int i = 1; i <= n; ++i)
- v[i] = poz[v[i]];
- for (int i = 1; i <= n; ++i)
- {
- Update(1, v[i], 1);
- for (int k = 2; k <= K; ++k)
- Update(k, v[i], Query(k - 1, v[i] - 1));
- }
- cout << Query(K, n);
- return 0;
- }
- #include <iostream>
- #include <algorithm>
- using namespace std;
- int n,GMax,greutate[5001],profit[5001];
- int C[1001][10001];
- int main()
- {
- int i,j;
- cin>>n>>GMax;
- for(i = 1 ; i <= n ; i ++)
- cin>>greutate[i]>>profit[i];
- for(i = 1 ; i <= n ; i ++)
- {
- for(j=1;j<=GMax ; j++)
- if(greutate[i] > j)
- C[i][j]=C[i-1][j];
- else
- C[i][j]=max(C[i-1][j], C[i-1][j-greutate[i]] + profit[i]);
- }
- cout<<C[n][GMax];
- return 0;
- }
- #include <iostream>
- #include <fstream>
- #include <algorithm>
- using namespace std;
- ifstream f("bete.in");
- ofstream g("bete.out");
- int n,S,B[100000],v[100000],last[100000],smax;
- void determinare(int i, int c)
- {
- if(i==0)
- g<<c<<"\n";
- else
- {
- determinare(i-B[last[i]], c+1);
- g<<last[i]<<" ";
- }
- }
- int main()
- {
- int i,j;
- f>>n>>S;
- for(i=1;i<=n;i++)
- {f>>B[i];
- smax+=B[i];}
- if(S>smax)
- {
- g<<"NU";
- return 0;
- }
- v[0]=1;
- for(i=1;i<=n;++i)
- for(j=smax;j>=0;j--)
- if(v[j]&&!v[j+B[i]])
- v[j+B[i]]=1,last[j+B[i]]=i;
- if(!v[S])
- g<<"NU\n";
- else
- {
- g<<"DA\n";
- determinare(S, 0);
- }
- }
- #include <iostream>
- using namespace std;
- const int Inf = 0x3f3f3f3f;
- int n, k, G, g[1002], nr[100002];
- void Halloween()
- {
- int i,j;
- nr[0] = 0;
- for(i=1; i <= n; ++i)
- for(j=G-g[i];j>=0;j--)
- if(nr[j]!=Inf&&nr[j+g[i]]>nr[j]+1)
- nr[j+g[i]]=nr[j]+1;
- }
- int main()
- {
- int i;
- cin>>n>>G;
- for (i=1;i<=G;i++)
- nr[i]=Inf;
- for (i = 1;i<= n;i++)
- cin>>g[i];
- Halloween();
- if(nr[G]<Inf)
- cout<<nr[G];
- else
- cout<<"NU";
- }
- #include <fstream>
- using namespace std;
- ifstream in("cladire2.in");
- ofstream out("cladire2.out");
- int clad[205][205];
- void reconstituire(int i, int j)
- {
- if(i==1 && j==1)out<<"1 1"<<endl;
- else
- {if(clad[i-1][j]>clad[i][j-1])
- reconstituire(i-1,j);
- else reconstituire(i,j-1);
- out<<i<<" "<<j<<endl;
- }
- }
- int main()
- {int n,m,j,i;
- in>>n>>m;
- for(i=1;i<=n;i++)
- for(j=1;j<=m;j++)in>>clad[i][j];
- for(i=1;i<=n;i++)
- for(j=1;j<=m;j++)
- {if(clad[i-1][j]>clad[i][j-1])clad[i][j]+=clad[i-1][j];
- else clad[i][j]+=clad[i][j-1];
- }
- out<<clad[n][m]<<endl;
- reconstituire(n,m);
- return 0;
- }
- #include <iostream>
- #include <fstream>
- using namespace std;
- ifstream in("taxe.in");
- ofstream out("taxe.out");
- int m,n,i,j,a[2001][2001];
- int main()
- {
- in>>n>>m;
- for(i=1 ; i<=n ; i++)
- for(j=1 ; j<=m ; j++)
- in>>a[i][j];
- for(i=1 ; i<=m ; i++)
- {
- a[0][i]=20001;
- a[n+1][i]=20001;
- }
- for(j=m-1 ; j>=1 ; j--)
- for(i=1 ; i<=n ; i++)
- {
- a[i][j]+=min(a[i][j+1],min(a[i-1][j+1],a[i+1][j+1]));
- }
- int mini=a[1][1];
- for(i=2 ; i<=n; i++)
- if(mini>a[i][1])
- mini=a[i][1];
- out<<mini;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement