90pts求调
查看原帖
90pts求调
981994
xinglili楼主2024/4/17 23:09

下面是我的写法

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;

int N,S,V,v[55],f[55][1005];

int main()
{
    cin>>N>>S>>V;
    for(int i=1;i<=N;i++)cin>>v[i];
    
    //f[i][j]:前i首歌中选择,音量不超过j的最大音量
    
    //初值
    for(int i=S;i<=V;i++)f[0][i]=S;
    for(int i=0;i<S;i++)f[0][i]=-inf;//不可能事件
    
    for(int i=1;i<=N;i++)
        for(int j=0;j<=V;j++)
        {
            int a=f[i-1][j+v[i]]-v[i],b=f[i-1][j-v[i]]+v[i];
            
            if(j>=v[i] && b>0)
            {
                if(j+v[i]<=V && a>0)f[i][j]=max(a,b);
                else f[i][j]=b;
            }
            else
            {
                if(j+v[i]<=V && a>0)f[i][j]=a;
                else f[i][j]=-inf;//无法避免低于0或高于maxlevel
            }
        }
    if(f[N][V]<0)cout<<-1;
    else cout<<f[N][V];
        
    return  0;
}
2024/4/17 23:09
加载中...