aaron0919 发表于 2022-11-27 17:34:55

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 17:00:55

本帖最后由 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]
查看完整版本: dp求助