1.
模拟,计算完差分数组后判断原数组和差分数组是否符合题意
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define maxx 1100000
int n;
int all[maxx];
int cf[maxx];
signed main() 
{
   cin>>n;
   for(int i=1;i<=n;++i)
   cin>>all[i];
   for(int i=1;i<n;++i)
   cf[i]=all[i+1]-all[i];
   for(int i=1;i<n;++i) 
   if(all[i]>=all[i+1])
    {
      cout<<"No";
      return 0;
    } 
   for(int i=1;i<n-1;++i) 
   if(cf[i]<=cf[i+1])
    {
      cout<<"No";
      return 0;
    }  
    cout<<"Yes";
}
2.计算距离原点距离判断得分,特判过大距离

#include<bits/stdc++.h>
using namespace std;
#define int long long
int x,y;
signed main() 
{
   cin>>x>>y;
   for(int i=1;i<=11;++i)
   {
      if(x*x+y*y<=i*i)
      {
         cout<<11-i;
         return 0;
      }
   }
   cout<<0;
}
3.动态规划,dp[n][n]表示当前处理到第i个数据,最后消灭的怪物在j位置。先对数据进行排序保证后效性,即不可能出现下标大的位置向下标小位置的转移。
随后初始化,递推方程为
dp[i][j]=dp[i-1][j](i!=j,代表此处妖怪未消灭) 
dp[i][i]=max(dp[i-1][j]+1)(代表消灭I处妖怪且j处妖怪两个属性均大于i)
 
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define maxx 1100
#define INF 0x3f3f3f3f
int n,h,a,ans;
pair<int,int> all[maxx];
int dp[maxx][maxx];
bool cmp(pair<int,int> a,pair<int,int> b)
{
   if(a.first!=b.first) return a.first>b.first;
   return a.second>b.second;
}
signed main() 
{
   cin>>n>>h>>a;
   for(int i=1;i<=n;++i)
   cin>>all[i].first;
   for(int i=1;i<=n;++i)
   cin>>all[i].second;
   sort(all+1,all+1+n,cmp);

   for(int i=0;i<=n;++i)
     for(int j=0;j<=n;++j)
      dp[i][j]=-INF;
 
   for(int i=1;i<=n;++i)
   {
     if(all[i].first<h&&all[i].second<a)
       dp[i][i]=1;
   }

   for(int i=1;i<=n;++i)
     for(int j=1;j<i;++j)
     {dp[i][j]=max(dp[i][j],dp[i-1][j]);
     if(all[i].first<all[j].first&&all[i].second<all[j].second)
     dp[i][i]=max(dp[i][i],dp[i-1][j]+1);}
   for(int j=1;j<=n;++j)
    ans=max(ans,dp[n][j]);

    cout<<ans; 
}
4.最小生成树,注意要预先处理必选边,且最后判断树是否联通。
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define maxx 201000
int fa[maxx];
int n,m,neww1,c,a,b,ans,d,neww;
struct mre
{
  int from,to,val,jh;
};
struct mre E[maxx];
struct mre B[maxx];
vector<int> ans1;
bool cmp(struct mre a,struct mre b)
{
  return a.val<b.val;
}
int find(int x)
{
    while(x!=fa[x]) x=fa[x]=fa[fa[x]];
    return x;
}

signed main() 
{
cin>>n>>m;
for(int i=1;i<=n;++i) fa[i]=i;
 for(int i=1;i<=m;++i) 
 {cin>>a>>b>>c>>d;
  if(d==1) 
  {
     B[++neww1].from=a;
     B[neww1].to=b;
     B[neww1].val=c;
     B[neww1].jh=i;
  }
  else
 {
  E[++neww].from=a;
  E[neww].to=b;
  E[neww].val=c;
  E[neww].jh=i;
  }

 }
 sort(E+1,E+neww+1,cmp);
 
 for(int i=1;i<=neww1;++i)
 {
   
   a=find(B[i].from);
   b=find(B[i].to);
   c=B[i].val;
   if(a!=b) fa[a]=b;
   ans1.push_back(B[i].jh);
   ans+=c;
 }

 for(int i=1;i<=neww;++i)
 {
   
   a=find(E[i].from);
   b=find(E[i].to);
   c=E[i].val;
   if(a==b) continue;
   ans1.push_back(E[i].jh);
   ans+=c;
   fa[a]=b;
 }
  a=find(1);
  for(int i=2;i<=n;++i)
  {
    if(a!=find(i))
    {
      cout<<"-1";
      return 0;
    }
  }
  cout<<ans1.size()<<"\n";
  for(int i=0;i<ans1.size();++i)
  cout<<ans1[i]<<" ";
}