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)
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]<<" ";
}



京公网安备 11010502036488号