一道简单DP,求助
查看原帖
一道简单DP,求助
178867
kevin006楼主2020/7/24 10:42
#include <bits/stdc++.h>
using namespace std;
const int maxN = 3010;
int f[maxN][maxN];
struct item
{
    int w,r;
    bool operator <(const item &x)const
    {
        return r>x.r;
    }
}a[maxN];
int main()
{
    int N;
    scanf("%d",&N);
    for(int i=1;i<=N;i++)scanf("%d%d",&a[i].w,&a[i].r);
    sort(a+1,a+1+N);
    f[1][1]=a[1].w;
    for(int i=2;i<=N;i++)
    {
        for(int j=1;j<=i;j++)
        {
            f[i][j]=f[i-1][j-1]+a[i].w-(j-1)*a[i].r;
            if(i-1>=j)f[i][j]=max(f[i][j],f[i-1][j]);
        }
    }
    int ans=0;
    for(int j=1;j<=N;j++)ans=max(ans,f[N][j]);
    printf("%d\n",ans);
}

为什么25行的条件不能加,加上会WA两个点,去掉就A了

2020/7/24 10:42
加载中...