求助

P1314 [NOIP2011 提高组] 聪明的质监员

Mikamedo @ 2018-12-17 19:12:57

如下,过样例,只求改WA,不求改RE

#include<bits/stdc++.h>
using namespace std;
int n,m,s;
int W[105];
int V[105];
int L[105];
int R[105];
long long calculate(int w)
{

    int num,sum,ans=0;
    for(int i=1;i<=m;i++)
    {
        num=0,sum=0;
        for(int j=min(L[i],R[i]);j<=max(L[i],R[i]);j++)
            if(W[j]>=w)
            {
                num++;
                sum+=V[j];
            }
        ans+=num*sum;
    }
    return abs(ans-s);
}
int main()
{
    scanf("%d%d%d",&n,&m,&s);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&W[i],&V[i]);
    for(int i=1;i<=m;i++)
        scanf("%d%d",&L[i],&R[i]);
    int l=1,r=n; 
    int mid;
    long long min=1e+13;
    for(int i=1;i<=n;i++)
        if(calculate(i)<min)
            min=calculate(i);
    printf("%d",min);
    return 0;
}

by 李泽影 @ 2018-12-17 19:49:52

。。。


by Mikamedo @ 2018-12-17 20:01:37

#include<bits/stdc++.h>
using namespace std;
int n,m,s;
int W[105];
int V[105];
int L[105];
int R[105];
long long calculate(int w)
{

    int num,sum,ans=0;
    for(int i=1;i<=m;i++)
    {
        num=0,sum=0;
        for(int j=max(R[i],L[i]);j<=max(R[i],L[i]);j++)
            if(W[j]>=w)
            {
                num++;
                sum+=V[j];
            }
        ans+=num*sum;
    }
    return abs(ans-s);
}
int main()
{
    scanf("%d%d%d",&n,&m,&s);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&W[i],&V[i]);
    for(int i=1;i<=m;i++)
        scanf("%d%d",&L[i],&R[i]);
    int l=1,r=n; 
    int mid;
    long long min=1e+13;
    for(int i=1;i<=n;i++)
        if(calculate(i)<min)
            min=calculate(i);
    printf("%d",min);
    return 0;
}

|