Quyhoachdong
Quyhoachdong
//BAI02: ROBOTXAU
#include<bits/stdc++.h>
using namespace std;
string a[100][100],L[100][100]; int n,i,j;
void nhap()
{cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) cin>>a[i][j];
L[1][1]=a[1][1]; }
2
void xuly()
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(i==1)L[i][j]=L[i][j-1]+a[i][j];
else if(j==1)L[i][j]=L[i-1][j]+a[i][j];
else L[i][j]=min(L[i-1][j]+a[i][j],L[i][j-1]+a[i][j]);
}
cout<<L[n][n];
}
int main()
{nhap(); xuly();}
//BAI04: BUYT
#include <bits/stdc++.h>
using namespace std;
const int maxN = 1e5 + 5;
int D[maxN], n;
int d1,d2,d3,c1,c2,c3;
int dP[maxN], s, f;
4
int main()
{
cin >> n;
cin >> d1 >> d2 >> d3 >> c1 >> c2 >> c3;
cin >> s >> f;
int dist;
for(int i = 2; i<=n; ++i) cin >> D[i];
for(int i = s; i<=f; ++i) dP[i] = INT_MAX;
dP[s] = 0;
for(int i = s+1; i<=f; ++i)
{
for(int j = i-1; j>=s; --j)
{
if (D[i] - D[j] > d3) break;
if (D[i] - D[j] <= d1) dP[i] = min(dP[i], dP[j] + c1);
if (D[i] - D[j] <= d2) dP[i] = min(dP[i], dP[j] + c2);
if (D[i] - D[j] <= d3) dP[i] = min(dP[i], dP[j] + c3);
}
}
cout << dP[f] << "\n";
return 0;
}
//BAI05: B_LINE
#include<bits/stdc++.h>
using namespace std;
int m,n,c,k,kq,maxx,a[300][300],l[100005];
int main()
{
5
cin>>m>>n>>k; maxx=0;
for (int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
cin>>c; l[c]++; maxx=max(maxx,c);
}
sort(l+1,l+maxx+1,greater <int>() ); // giam dan
kq=0;
for (int i=1;i<=k;i++) kq+=l[i];
cout<<kq;
return 0;
}
//BAI06: J_BONUS
#include <bits/stdc++.h>
using namespace std;
const int maxN = 505;
int n, m, a[maxN][maxN]; double dP[maxN][maxN];
int main()
{
cin >> m >> n;
for(int i = 1; i<=m; ++i)
for(int j = 1; j<=n; ++j) cin >> a[i][j];
for(int j = 0; j<=n; ++j)
dP[0][j] = dP[m+1][j] = INT_MIN;
for(int i = 1; i<=m; ++i) dP[i][1] = max(0, a[i][1]);
for(int j = 2; j<=n; ++j)
for(int i = 1; i<=m; ++i)
{
6
dP[i][j] = max(dP[i][j-1], max(dP[i-1][j-1], dP[i+1][j-1]));
if (a[i][j] < 0) dP[i][j] = dP[i][j] * 1.0 / abs(a[i][j]);
else dP[i][j] += a[i][j];
}
double res = -1e9;
for(int i = 1; i<=m; ++i) res = max(res, dP[i][n]);
cout << fixed << setprecision(3) << res;
return 0;
}
//BAI07: dayloi
#include <bits/stdc++.h>
#define Nmax 10009
using namespace std;
int L1[Nmax], L2[Nmax]; int a[Nmax],i,j,n;
void nhap()
{cin>>n;
for(i=1;i<=n;i++) cin>>a[i];}
void xuat()
{
L1[1]=L2[1]=1;
for(i=2;i<=n;i++)
{
L1[i]=1;
for(j=1;j<=i-1;j++)
if(a[j]>a[i] && L1[j]+1>L1[i]) L1[i]=L1[j]+1;
}
for(i=n;i>=1;i--)
{
7
L2[i]=1 ;
for(j=n;j>=i+1;j--)
if(a[j]>a[i] && L2[j]+1>L2[i]) L2[i]=L2[j]+1;
}
int kq=0;
for(int i=1;i<=n;i++) kq=max(kq,L1[i]+L2[i]-1);
cout<<kq;
}
int main() { nhap(); xuat(); }
//BÀI9: BÀI3.PAS
#include <bits/stdc++.h>
using namespace std;
int number_student, student[105], sum_score[25005], lim_sum = 0, sum = 0;
void input() {
cin >> number_student;
for(int i = 1; i <= number_student; ++i)
{cin >> student[i]; sum += student[i]; }
lim_sum = sum / 2;
}
void build_sum_score() {
sum_score[0] = 1;
for(int i = 1; i <= number_student; ++i) {
for(int j = lim_sum; j >= 1; --j) {
if(sum_score[j - student[i]]) {
sum_score[j] = 1;
9
}}}}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
input();
build_sum_score();
for(int i = lim_sum; i >= 1; --i) {
if(sum_score[i]) {
cout << i << " " << sum - i; break;
}}
return 0;
}
//BÀI10: LCIS DÃY CON DÀI NHẤT
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll nmax=5e2+9;
ll n,m;ll a[nmax],b[nmax];ll dp[nmax][nmax];
void nhap()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>m;
for(int i=1;i<=m;i++) cin>>b[i];
}
void xuat()
{
for(int i=1;i<=n;i++)
{
10
ll k=0;
for(int j=1;j<=m;j++)
{
if(a[i]>b[j]) k=max(k,dp[i-1][j]);
if(a[i]==b[j]) dp[i][j]=k+1;
else dp[i][j]=dp[i-1][j];
}}
ll d=LLONG_MIN;
for(int i=1;i<=m;i++) d=max(d,dp[n][i]);
cout<<d; }
int main() {nhap(); xuat(); return 0;}
//BÀI 11: QUÂN CỜ DOMINO-DOMIOES
#include<bits/stdc++.h>
#define X first
#define Y second
using namespace std;
int n; pair <int,int>a[1000009];map <long long,long long>k;long long res;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].X>>a[i].Y;
}
sort(a+1,a+1+n); // auto theo X
int x,y;
for(int i=1;i<=n;i++)
{
x=a[i].X; y=a[i].Y;
11
if(k[y]<k[x]+1)
{k[y]=k[x]+1; res=max(res,k[y]); }}
cout<<res;
return 0;
}
//BAI15:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll nmax=1e2+9; const ll gmax=1e6;
ll n; ll a[nmax]; ll b[nmax]; ll dp[nmax][nmax]; ll g=gmax;
void nhap()
{cin>>n;
for(int i=1;i<=n;i++)
{cin>>a[i];
b[i]=b[i-1]+a[i]; }}
14
void xuat()
{
for(int i=1;i<=n-1;i++)
{
dp[i][i+1]=a[i]+a[i+1];
}
for(int i=2;i<=n-1;i++)
{
for(int j=1;j<=n-i;j++)
{
dp[j][i+j]=g;
for(int k=j;k<=j+i-1;k++)
{
if(dp[j][i+j]>dp[j][k]+dp[k+1][i+j])
{
dp[j][j+i]=dp[j][k]+dp[k+1][i+j];
}}
dp[j][i+j]=dp[j][i+j]+b[i+j]-b[j-1];
}}
cout<<dp[1][n];
}
int main()
{nhap(); xuat(); return 0;}
//CHẠY QUA TRÁI HOẶC XUỐNG DƯỚI, SAO CHO ĐƯỢC SỐ LỚN NHẤT
#include <bits/stdc++.h>
using namespace std;
long long n,m, L[100001][100001], a[100001][100001];
void nhap()
15
{cin>>m>>n;
for (int i=1; i<=m; i++)
{
for (int j=1; j<=n; j++)
{cin>>a[i][j];} }}
void xuly()
{
for (int i=1; i<=m; i++)
{
for (int j=1; j<=n; j++)
{
L[i][j]=max(L[i-1][j], L[i][j-1])+a[i][j];
}
}
cout<<L[m][n];
}
int main()
{nhap(); xuly(); return 0;}
#include <bits/stdc++.h>
using namespace std;
long long n,m, L[100001][100001], a[100001][100001];
void nhap()
{
cin>>m>>n;
for (int i=1; i<=m; i++)
{
for (int j=1; j<=n; j++)
{cin>>a[i][j];}
16
}}
void xuly()
{
for (int i=1; i<=m; i++)
{
for (int j=1; j<=n; j++)
{
if (i==m) L[i][j]=L[i-1][j];
else L[i][j]=max(L[i-1][j], L[i][j-1])+a[i][j];
}
}
long long kq=L[m][1];
for (int i=2; i<=n; i++)
{
kq=max(kq,L[m][i]);
}
cout<<kq;
}
int main()
{ nhap(); xuly(); return 0;}
//qbstr
#include <bits/stdc++.h>
using namespace std;
string a,b;
long long f[1000][1000];
void nhap()
{getline(cin,a); getline(cin,b);}
18
void xuli()
{
for(int i = 0;i < a.size();i++)
{
for(int j = 0;j < b.size();j++)
{
if(a[i]==b[j])
f[i+1][j+1]=f[i][j]+1;
else
f[i+1][j+1]=max(f[i][j+1],f[i+1][j]);
}
}
cout << f[a.size()][b.size()];
}
int main()
{nhap(); xuli(); return 0;}
//liq
#include <bits/stdc++.h>
using namespace std;
const int b=1009;
int n,p=INT_MIN; int dp[b],a[b];
void nhap()
{for(int i=0;i<=b;i++)
{
dp[i]=1;
}
cin>>n;
for(int i=1;i<=n;i++)
19
{cin>>a[i]; }}
void xuat()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<i;j++)
{
if(a[i]>=a[j])
{
dp[i]=max(dp[i],dp[j]+1);
}}}
for(int i=1;i<=n;i++)
{p=max(p,dp[i]); }
cout<<p;
}
int main()
{nhap();xuat();return 0;}
//lis
#include<bits/stdc++.h>
using namespace std;
int n, kq=1;
long long a[100001],b[100001];
void nhap()
{cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];}
void xuli()
{
b[1]=a[1];
20
for(int i=2;i<=n;i++)
{
int k=lower_bound(b+1,b+kq+1,a[i])-b-1;
b[k+1]=a[i]; kq=max(kq,k+1);
}
cout<<kq<<endl;}
int main()
{nhap();xuli();}
//fibonacci
#include<bits/stdc++.h>
using namespace std;
long long f[10001];
int n;
void nhap()
{cin>>n;}
void xuli()
{
f[1]=f[2]=1;
for(int i=3;i<=n;i++)
{
f[i]=(f[i-2]+f[i-1])%(1000000007);
}
cout<<f[n];}
int main()
{ nhap(); xuli();}
//TRIAGLE
#include <bits/stdc++.h>
using namespace std;
long long n, tam=0; long long a[1000][1000]; long long f[1000][1000];
void nhap()
{ cin>>n;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=i; j++)
{
cin>>a[i][j];
}}}
void xuli()
{
22
for(int i=1; i<=n; i++)
{
for(int j=1 ; j<=i; j++)
{
if(j==i)
f[i][j]=f[i-1][j-1]+a[i][j];
else if(j==1)
f[i][j]=f[i-1][j]+a[i][j];
else
f[i][j]=max(f[i-1][j-1],f[i-1][j])+a[i][j];
}
}
for(int j=1; j<=n ;j++)
{
tam=max(f[n][j],tam);
}
cout<<tam;
}
int main()
{nhap();xuli();return 0;}
//ZIGZAC
#include <bits/stdc++.h>
const int N=1e6+5;
using namespace std;
int n,a[5][N]; long long F[5][N];
void QHD(){
long long kq=INT_MIN;
F[1][1]=a[1][1];
F[2][1]=a[2][1];
kq=max(F[1][1],F[2][1]);
for (int j=2; j<=n; j++)
{
for (int i=1; i<=2; i++)
{
if(i==1) F[i][j]=max(F[i][j-1],F[i+1][j-1]+a[i][j]);
if(i==2) F[i][j]=max(F[i][j-1],F[i-1][j-1]+a[i][j]);
kq=max(kq,F[i][j]);
}
}
cout<<kq;
}
int main(){
cin>>n;
for (int i=1; i<=2; i++)
24
for (int j=1; j<=n; j++)
cin>>a[i][j];
QHD();
return 0;
}
//VALIA
#include<bits/stdc++.h>
using namespace std;
long long w[1000],v[1000],f[1000][1000],i,j,n,m;
int main()
{cin>>m>>n;
for(i=1;i<=m;i++) cin>>w[i]>>v[i];
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(w[i]<=j) f[i][j]=max(f[i-1][j],f[i-1][j-w[i]] + v[i]);
else f[i][j]=f[i-1][j];
cout<<f[m][n];}
//VALIB
#include<bits/stdc++.h>
using namespace std;
long long w[1000],v[1000],f[1000][1000],i,j,n,m;
int main()
{
cin>>n>>m;
for(i=1;i<=n;i++) cin>>w[i]>>v[i];
for(i=1;i<=n;i++)
25
for(j=1;j<=m;j++)
if(w[i]<=j) f[i][j]=max(f[i][j],f[i][j-w[i]] + v[i]);
else f[i][j]=f[i-1][j];
cout<<f[n][m];
}
//BAI01:
#include <bits/stdc++.h>
using namespace std;
int n, dp[1001][1001];
int main()
{
cin>>n;
for (int i=1; i<=n; i++)
{
for (int j=1; j<=n; j++)
{
dp[i][j]=1;
}
}
for (int i=n-1; i>=1; i--)
{
for (int j=n-1; j>=1; j--)
{
dp[i][j]=dp[i+1][j]+dp[i][j+1];
}
}
cout<<dp[1][1];
}
26
//BÀI 02:
#include <bits/stdc++.h>
using namespace std;
int n,a[10001], b[10001], dp[10001][10001];
int main()
{
cin>>n;
for (int i=1; i<=n; i++)
{
cin>>a[i];
b[n-i+1]=a[i];
}
for (int i=1; i<=n; i++)
{
for (int j=1; j<=n; j++)
{
if (a[i]==b[j]) dp[i][j]=dp[i-1][j-1]+1;
else dp[i][j]=max(dp[i][j-1], dp[i-1][j]);
}
}
int kq;
kq=n-dp[n][n];
cout<<kq;}
//BÀI03:
#include <bits/stdc++.h>
using namespace std;
const int MAX=1000010; int n,p[MAX]; long long t[MAX];
int main()
27
{
cin>>n;
for (int i=1; i<=n; i++)
{
cin>>p[i];
t[i]=0;
}
t[n]=p[n];
for (int i=n+1; i<=n+5; i++)
p[i]=t[i]=0;
for (int i=n-1; i>=1; i--)
{
t[i]=(long long)p[i]+t[i+2];
long long k=(long long)(p[i]+p[i+1])+t[i+4];
if (k>t[i]) t[i]=k;
k=(long long)(p[i]+p[i+1]+p[i+2])+t[i+6];
if (k>t[i]) t[i]=k;
}
cout<<t[1]<<endl;
return 0;
}