#include #include #include using namespace std; int main(){ int t,n; cin>>t>>n; int d[n+1],a[n+1],b[n+1]; for(int i=1;i<=n;i++){ cin>>d[i]; } a[0]=0; b[0]=0; for(int i=1;i<=n;i++){//处理A键的情况 a[i]=a[i-1]+2; for(int j=1;j<i;j++){//枚举最后一次使用A键的位置 if(d[i]-d[j]<=0){//如果敌人能够被击败 a[i]=min(a[i],a[j-1]+2+i-j-1);//从j-1到i-1使用A键,再加上第i个敌人使用B键击败 } } if(d[i]<=0){//如果敌人能够被击败 a[i]=min(a[i],b[i-1]+1);//直接使用B键击败 } } b[1]=1;//处理B键的情况 for(int i=2;i<=n;i++){ b[i]=a[i-1]+1;//使用A键击败前面的敌人,再使用B键击败第i个敌人 if(d[i]<=0){//如果敌人能够被击败 b[i]=min(b[i],b[i-1]+1);//直接使用B键击败 } for(int j=2;j<i;j++){//枚举最后一次使用B键的位置 if(d[i]-d[j]<=0){//如果敌人能够被击败 b[i]=min(b[i],a[j-1]+i-j+1);//从j-1到i-1使用A键,再使用B键击败第i个敌人 } } } cout<<b[n]<<endl;//输出结果 return 0; } 以上代码在输入为 3 3 1 2 1 2 3 2 1 2 3 的时候输出是什么内容:

对于输入3 3 1 2 1 2 3 2 1 2 3,上述代码输出为2。

C++ 算法题:使用 A 和 B 键击败敌人的最少操作次数

原文地址: https://www.cveoy.top/t/topic/lB1i 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录