- 姚梦航 的博客
我是傻X---TJ
- 2025-1-20 14:06:25 @
A:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
int n, a[N];
int f[N];
int cnt;
int main(void)
{
cin >> n;
for(int i = 1;i <= n; i ++) cin >> a[i];
f[0] = 0;
f[1] = a[1];cnt = 1;
for(int i = 2; i <= n; i++)
{
int left = 1, right = cnt;
int res = -1;
while(left <= right)
{
int mid = (left + right) / 2;
if(f[mid] >= a[i])
{
res = mid;
right = mid - 1;
}
else
{
left = mid + 1;
}
}
if(res == -1)
{
cnt++;
f[cnt] = a[i];
}
else
{
f[res] = a[i];
}
}
cout << cnt << endl;
return 0;
}
B
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int to[2000]={0};
int a[2000];
int d[2000];
for(int i=1;i<=n;i++)
{
cin>>a[i];
d[i]=a[i];
}
int v,u;
bool vis[2000][2000];
while(1)
{
cin>>v>>u;
if(v0&&u0) break;
vis[v][u]=true;
}
for(int i=1;i<=n;i++)
{
for(int j=i;j<=n;j++)
{
if(vis[i][j]&&d[j]<d[i]+a[j])
{
d[j]=d[i]+a[j];
to[j]=i;
}
}
}
int maxx=0;
int k;
for(int i=1;i<=n;i++)
{
if(d[i]>maxx)
{
maxx=d[i];
k=i;
}
}
int print[2000];
print[0]=k;
int print_size=1;
for(int i=1;;i++)
{
if(to[k]==0) break;
print[i]=to[k];
k=to[k];
print_size++;
}
for(int i=print_size-1;i>=0;i--)
{
if(i>0) cout<<print[i]<<"-";
else cout<<print[i];
}
cout<<endl;
cout<<maxx;
return 0;
}
C
#include<bits/stdc++.h>
using namespace std;
const int maxn=100050;
int a[maxn],dp[maxn],s[maxn],n=0,k,ans;
int main(){
ios::sync_with_stdio(0);
while(cin>>k)a[++n]=k;
for(int i=1;i<=n;++i){
dp[i]=1;
int l=0,r=ans+1;
while(r-l>1){
int mid=(l+r)>>1;
if(s[mid]>=a[i]){
l=mid;
}
else {
r=mid;
}
}
dp[i]=l+1;
s[dp[i]]=a[i];
ans=max(ans,dp[i]);
}
cout<<ans<<endl;ans=0;
memset(s,0,sizeof(s));
for(int i=1;i<=n;++i){
dp[i]=1;
int l=0,r=ans+1;
while(r-l>1){
int mid=(l+r)>>1;
if(s[mid]<a[i]){
l=mid;
}
else {
r=mid;
}
}
dp[i]=l+1;
s[dp[i]]=a[i];
ans=max(ans,dp[i]);
}
cout<<ans<<endl;
return 0;
}D
#include
using namespace std;
const int N=5*1e5+5; int a[N], f[N], ans;
int main() { int n; cin>>n; for(int i=1; i<=n; i++) cin>>a[i];
for(int i=1; i<=n; i++) { int mx = 0; for(int j=1; j<i; j++) { if(a[j] < a[i]) mx = max(mx, f[j]); } f[i] = mx + 1; }
for(int i=1; i<=n; i++) ans = max(ans, f[i]); cout<<"Max="<<ans<<endl; return 0; }E #include <bits/stdc++.h> using namespace std; const int N = 1005; int n, cost[N]; int dp[N]; int f(int k) { if (k == 0 || k == 1) return dp[k] = 0; if (dp[k] != -1) return dp[k]; return dp[k] = min(f(k - 1) + cost[k - 1], f(k - 2) + cost[k - 2]); } void bright(void) { cout << f(n) << endl; } void light(void) { ios::sync_with_stdio(0); cin >> n; for (int i = 0; i < n; i++) cin >> cost[i]; for (int i = 2; i <= n; i++) dp[i] = -1; } int main(void) { light(); bright(); return 0; } F #include<bits/stdc++.h> using namespace std; const int N=1010; int n; int a[N][N]; int main(){ cin>>n; for(int i = 1; i <= n; i ++) for(int j = 1; j <= i; j ++) cin >> a[i][j]; for(int i = n; i >= 1; i--) for(int j = i; j >= 1; j--) a[i][j]+=max(a[i+1][j],a[i+1][j+1]); cout << a[1][1]; return 0; } G #include<bits/stdc++.h> using namespace std; int n,a[110],dp[110]; int main() { cin>>n; for (int i=1;i<=n;i++) { cin>>a[i]; } dp[1]=a[1]; dp[2]=max(a[1],a[2]); for (int i=3;i<=n;i++) { dp[i]=max(dp[i-1],dp[i-2]+a[i]); } int t=0; for (int i=1;i<=n;i++) { t=max(t,dp[i]); } cout<<t; return 0; } H #include using namespace std; const int N=2*1e6+10; long long n,a[N],f[N],ans=-0x3f3f3f3f; int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) f[i]=max(f[i-1]+a[i],a[i]); for(int i=1;i<=n;i++) ans=max(ans,f[i]); cout<<ans<<endl; return 0; } I #include<bits/stdc++.h> using namespace std; const int maxn=100050; int a[maxn],dp[maxn],s[maxn],n=0,k,ans; int main(){ ios::sync_with_stdio(0); while(cin>>k)a[++n]=k; for(int i=1;i<=n;++i){ dp[i]=1; int l=0,r=ans+1; while(r-l>1){ int mid=(l+r)>>1; if(s[mid]>=a[i]){ l=mid; } else { r=mid; } } dp[i]=l+1; s[dp[i]]=a[i]; ans=max(ans,dp[i]); } cout<<ans<<endl;ans=0; memset(s,0,sizeof(s)); for(int i=1;i<=n;++i){ dp[i]=1; int l=0,r=ans+1; while(r-l>1){ int mid=(l+r)>>1; if(s[mid]<a[i]){ l=mid; } else { r=mid; } } dp[i]=l+1; s[dp[i]]=a[i]; ans=max(ans,dp[i]); } // cout<<ans<<endl; return 0; }