【GYM102091】2018-2019 ACM-ICPC, Asia Nakhon Pathom Regional Contest

题目大意:有$n$个不同的野兽,定义第$i$ 个野兽有 $i$ 个眼睛和 $h[i]$ 个角,你可以任意从中选择一个野兽进行进化,每次进化角数量必须增加,而且进化后要满足眼镜的变化量 $\triangle i \leq w$,求最多的进化次数。

题解:以$h$的值从大到小排序,$f[i]$表示从第i个野兽开始进化的最多次数。对于$1 \leq i \leq j$若满足条件则$f[j]=max \{  f[i]+1 \}$。

【GYM102091】2018-2019 ACM-ICPC, Asia Nakhon Pathom Regional Contest

【GYM102091】2018-2019 ACM-ICPC, Asia Nakhon Pathom Regional Contest

1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cmath> 5 #include<cstring> 6 #include<algorithm> 7 using namespace std; 8 9 int n,w,ans; 10 int f[5005]; 11 struct hh 12 { 13 int eye,horn; 14 }a[5005]; 15 bool cmp(hh a,hh b) 16 { 17 return a.horn>b.horn; 18 } 19 int main() 20 { 21 int i,j;; 22 scanf("%d%d",&n,&w); 23 for(i=1;i<=n;i++) 24 scanf("%d",&a[i].horn); 25 for(i=1;i<=n;i++) 26 a[i].eye=i; 27 sort(a+1,a+1+n,cmp); 28 for(i=1;i<=n;i++) 29 for(j=i+1;j<=n;j++)//h[i]>h[j] 30 if(a[i].horn>a[j].horn&&abs(a[i].eye-a[j].eye)<=w) 31 f[j]=max(f[j],f[i]+1); 32 for(i=1;i<=n;i++) 33 ans=max(f[i],ans); 34 printf("%d",ans); 35 return 0; 36 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpppdg.html