今年原地起爆,没进复赛,看别的dalao码代码各种AK虐场心痒痒,来写个题解
Day2还在肝,就先写Day1吧……
T1
NOIP2013年原题,用个滚动数组就能水过去了……(不用应该也行吧)
做法大概是从头开始扫,记录每个位置的深度,然后读入一个深度,如果后面的更深就需要多填 后面的深度−-−前面的深度 次
#include<bits/stdc++.h>
using namespace std;
int n,a,b;
long long ans;
int main()
{
scanf("%d%d",&n,&b);
ans=b;
for(int i=1;i<n;i++)
{
scanf("%d",&a);
if(a>b) ans+=a-b;
b=a;
}
printf("%lld",ans);
return 0;
}
T2
明显的DP背包题,想不到的话使用DFS+DP可以获得65(洛咕数据)的好成绩
把面值排个序,从头向后扫,如果f[a[i]]=1f[a[i]]=1f[a[i]]=1则表示a[i]a[i]a[i]是可以用前面的面值表示出来的,跳过,否则从a[i]a[i]a[i]循环到maxnmaxnmaxn(a[i]a[i]a[i]中的最大值),判断f[j−a[i]]f[j-a[i]]f[j−a[i]]能否被表示,可以的话就让f[j]=1f[j]=1f[j]=1即可
#include<bits/stdc++.h>
using namespace std;
int n,a[105],f[25005],ans,maxn;
int main()