0% found this document useful (0 votes)
6 views29 pages

Quyhoachdong

The document contains a series of C++ programming problems, each with a specific algorithmic challenge. Each section includes code that implements a solution to the problem, such as finding maximum paths, calculating minimum costs, or determining subsequences. The problems are designed to test various programming skills and concepts, including dynamic programming, greedy algorithms, and data structures.

Uploaded by

nachuong0512
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views29 pages

Quyhoachdong

The document contains a series of C++ programming problems, each with a specific algorithmic challenge. Each section includes code that implements a solution to the problem, such as finding maximum paths, calculating minimum costs, or determining subsequences. The problems are designed to test various programming skills and concepts, including dynamic programming, greedy algorithms, and data structures.

Uploaded by

nachuong0512
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 29

1

//BAI01: MAXPATH: ĐƯỜNG ĐI CỰC ĐẠI


#include <bits/stdc++.h>
using namespace std;
int m,n,a[1005][1005],f[1005][1005]; long long maxx=0;
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 i=1;i<=m;i++) f[i][1]=a[i][1];
for(int j=2;j<=n;j++)
for(int i=1;i<=m;i++)
if(i==1) f[i][j]=max(f[i][j-1],f[i+1][j-1])+a[i][j];
else if(i==m) f[i][j]=max(f[i][j-1],f[i-1][j-1])+a[i][j];
else f[i][j]=max(f[i+1][j-1],max(f[i][j-1],f[i-1][j-1]))+a[i][j];
for(int i=1;i<=m;i++)
if(f[i][n]>maxx) maxx=f[i][n];
cout<<maxx;
return 0;
}

//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();}

//BAI03: TRÒ CHƠI THƯ GIÃN GAME


#include <bits/stdc++.h>
using namespace std;
const int maxN = 1e3 + 5;
int n, m, b, a[maxN][maxN], dP[maxN][maxN], F[maxN][maxN];
int main()
{
cin >> n >> m >> b;
for(int i = 1; i<=n; ++i)
for(int j = 1; j<=m; ++j) cin >> a[i][j];
for(int i = 1; i<=n; ++i)
for(int j = 1; j<=m; ++j)
{
dP[i][j] = max(dP[i-1][j],max(dP[i-1][j-1], dP[i-1][j+1]));
dP[i][j] += a[i][j];
3
if (!a[i][j]) dP[i][j] -= (dP[i][j] / 2);
}
for(int j = 1; j<=m; ++j)
{
F[1][j] = a[1][j] + b; if(!a[1][j]) F[1][j] -= F[1][j]/2;
}
for(int i = 0; i<=n; ++i) F[i][0] = F[i][m+1] = INT_MAX;
for(int i = 2; i<=n; ++i)
{
for(int j = 1; j<=m; ++j)
{
F[i][j] = min(F[i-1][j], min(F[i-1][j-1], F[i-1][j+1]));
F[i][j] += a[i][j];
if (!a[i][j]) F[i][j] -= (F[i][j]/2);
}
}
int res = 0, ans = INT_MAX;
for(int j = 1; j<=m; ++j) res = max(res, dP[n][j]), ans = min(ans, F[n][j]);
cout << ans << "\n" << res + b;
return 0;
}

//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(); }

//BAI08: ĐAN XEN


#include <bits/stdc++.h>
using namespace std;
int quantity, max_black = -1e9, max_white = -1e9, max_value = -1e9, value[1000005],
color[1000005];
void input() {
cin >> quantity;
for(int i = 1; i <= quantity; ++i) {
cin >> value[i]; }
for(int i = 1; i <= quantity; ++i) {
cin >> color[i];
}}
void build_max_value() {
if(color[1] == 2) {
max_white = value[1];
}
else {
max_black = value[1]; }
for(int i = 2; i <= quantity; ++i) {
if(color[i] == 2) {
8
max_white = max({max_white, max_black + value[i], value[i]});
}
else {
max_black = max({max_black, max_white + value[i], value[i]});
}
max_value = max({max_black, max_white, value[i]});
}}
int main()
{
input();build_max_value(); cout << max_value;
return 0;
}

//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;
}

//BÀI 12: xau con SUBSTR


#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll nmax=1e6+5; ll a[nmax],b[nmax];ll k;string s;
void nhap()
{cin>>k; cin>>s;}
void xuat()
{
ll n=s.size();
for(int i=0;i<n;i++)
{
a[i+1]=a[i]+(s[i]=='1');
}
ll kq=0; b[0]=1;
for(int i=1;i<=n;i++)
{
if(a[i]>=k)
{
kq+=b[a[i]-k];
}
b[a[i]]++;
}
12
cout<<kq;
}
int main()
{nhap(); xuat(); return 0;}

//BAI13: XẾP THÁP


#include <bits/stdc++.h>
using namespace std;
pair<int,int>a[1005];
int n,kq=0,t[1005];
int main()
{cin>>n;
for (int i=1; i<=n; i++)
{
cin>>a[i].first>>a[i].second;
}
for (int i=1; i<=n; i++)
{
t[i]=a[i].second;
for (int j=1; j<i; j++)
if (a[j].first>=a[i].first) t[i]=max(t[i],t[j]+a[i].second);
}
for (int i=1; i<=n; i++) kq=max(kq,t[i]);
cout<<kq;}

//BAI14: DÃY TĂNG


#include <bits/stdc++.h>
#define ll long long
using namespace std;
13
const ll MOD=1e9+7; const ll nmax=2009; ll n,k; ll dp[nmax][nmax];
void xuat()
{
for(int i=0;i<=2000;i++)
{
for(int j=0;j<=i;j++)
{
if(i==j||j==0) dp[i][j]=1;
else dp[i][j]=(dp[i-1][j]+dp[i-1][j-1])%MOD;
}}}
void nhap()
{
cin>>n>>k;
cout<<dp[k][n];
}
int main()
{xuat(); nhap(); 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;}

//max: CHO 1 BẢNG A, TỔNG LỚN NHẤT


#include <bits/stdc++.h>
#define nmax 1000007
using namespace std;
long long m,n; long long a[1000][1000],f[1000][1000];
const long long inf=100000007;
void nhap()
{cin >> m >> n;
17
for(int i= 1;i <= m;i++)
{
for(int j = 1;j <=n;j++)
{
cin >> a[i][j]; }}}
void xuli()
{
for(int j=1; j<=n; j++)
f[1][j]=a[1][j];
for(int i=1; i<=m-1; i++)
f[i][0]=f[i][n+1]=-inf;
for(int i=2; i<=m; i++)
for(int j=1; j<=n; j++)
f[i][j]=max(f[i-1][j],max(f[i-1][j-1],f[i-1][j+1]))+a[i][j];
long long tam = 0;
for(int j=1; j<=n; j++)
tam=max(tam,f[m][j]);
cout<<tam;
}
int main()
{nhap();xuli();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();}

//vsteps bậc thang


21
#include <bits/stdc++.h>
using namespace std;
int n,m,k,L[1000005]; bool a[1000005];
int main()
{
cin>>n>>m;
memset(a,true,sizeof(a));
for (int i=1; i<=m;i++)
{ cin>>k; a[k]=false; }
L[0]=0; L[1]=1;
for (int i=2; i<=n; i++)
if (a[i]==true) L[i]=(L[i-1]+L[i-2])%14062008;
cout<<L[n];
}

//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;}

//XẾP HÀNG MUA VÉ-NKTICK


#include<bits/stdc++.h>
using namespace std;
int t[60005],r[60005],f[60005],i,n;
int main()
{ cin>>n;
for(i=1;i<=n;i++) cin>>t[i];
for(i=1;i<=n-1;i++) cin>>r[i];
23
f[0]=0; f[1]=t[1];
for(i=2;i<=n;i++) f[i]=min(f[i-1]+t[i],f[i-2]+r[i-1]);
cout<<f[n];
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;
}

//BÀI 4: CÂY GẠO


#include <bits/stdc++.h>
using namespace std;
const int maxN=1e5+10;
int n; int a[maxN],b[maxN],res[maxN]; long long f[maxN][2];
long long dp(int i, int ok)
{
28
if (i>n) return 0;
long long &res=f[i][ok];
if (res!=-1) return res;
if (ok) res=dp(i+1,0);
else res=min(dp(i+1,0)+a[i],dp(i+1,1)+b[i]);
return res;
}
void trace(int i, int ok)
{
if (i>n) return ;
if (ok) res[i]=0,trace(i+1,0);
else
{
if (dp(i+1,0)+a[i] <= dp(i+1,1)+b[i])
{res[i]=1; trace(i+1,0); return; }
else
{res[i]=2; trace(i+1,1); return; }
}
return;
}
int main()
{
cin>>n;
for (int i=1; i<=n; i++) cin >>a[i]>>b[i];
memset(f,-1, sizeof f);
cout <<dp(1,0)<<"\n";
trace(1,0);
for (int i=1; i<=n; i++)
cout <<res[i]<<" "; return 0;}
29
.

You might also like