dp求助
本帖最后由 aaron0919 于 2022-11-27 20:10 编辑我的code
#include<bits/stdc++.h>
using namespace std;
int a,dp;
int main(){
int p,q,n;
cin>>p>>q>>n;
for(int i=1;i<=n;i++){
cin>>a;
}
dp=p;
dp=p-q>=0?p-q+a:-1e9;
for(int i=2;i<=n+1;i++){
int flag=0;
if(dp-q>=0){
dp=max(dp,dp-q+a);
flag++;
}
if(dp-q>=0){
dp=max(dp,dp-q+a);
flag++;
}
if(!flag){
dp=-1e9;
}
}
if(dp<=0){
cout<<"NO";
}else{
cout<<dp;
}
return 0;
}
只能八十分。。。 本帖最后由 jhq999 于 2022-11-28 19:03 编辑
#include <stdio.h>
//int node;
int main()
{
int i,P,Q,n,t,prv= {0},cur=0; //cur是跳到当前位置消耗的最小量,
//prvprv是当前位置前两个位置消已经耗的能量
scanf("%d%d",&P,&Q);
scanf("%d",&n);
prv=0;
scanf("%d",&prv);
prv-=Q;
for (i=2; i<=n; i+=1)
{
/*if((P+prv<Q)&&((P+prv<Q))
{
printf("NO");
return 0;
}*/
if(prv>prv)t=prv;//选前两个位置消耗最少的
else t=prv;
if(P+t<Q)
{
printf("NO");
return 0;
}
scanf("%d",&cur);//当前位置的能量ai
cur+=t-Q;//当前位置的能量ai减去跳一次消耗的能量再加上前两个能量消耗最少的
prv=prv;
prv=cur;
}
if(prv>prv)t=prv;
else t=prv;//终点前两个位置消耗最少的
if(P+t<Q)
{
printf("NO");
return 0;
}
printf("%d",P+t-Q);
return 0;
}
页:
[1]