25分,dpWA
查看原帖
25分,dpWA
602932
NumberTrart楼主2023/5/19 20:45
#include<iostream>
#include<algorithm>
using namespace std;
int t,n,m;
int dp[105][10005];//在第i天最少欠了i时最后能获得的金币最大值
int p[105][105];
int main()
{
    cin>>t>>n>>m;
    for(int i=1;i<=t;i++)
    for(int j=1;j<=n;j++)
        scanf("%d",p[i]+j);
    if(t==1)
        cout<<m;
    else if(n==1)
    {
        for(int i=1;i<t;i++)
            if(p[i][1]<p[i+1][1])
                m=m%p[i][1]+m/p[i][1]*p[i+1][1];
        cout<<m;
    }
    else
    {
        for(int i=2;i<=t;i++)
            for(int j=1;j<=n;j++)
                for(int z=0;z<=m;z++)
                {
                    if(p[i][j]<p[i-1][j]||z<p[i-1][j])
                        dp[i][z]=max(dp[i][z],dp[i-1][z]);
                    else
                        dp[i][z]=max(dp[i][z],dp[i-1][z-p[i-1][j]]+p[i][j]-p[i-1][j]);
                }
        cout<<dp[t][m];
    }
    return 0;
}

WA也总比TLE好一点

麻烦各位大佬看看哪里错了谢谢

2023/5/19 20:45
加载中...