九十分不会改

P1064 [NOIP2006 提高组] 金明的预算方案

Mojiu @ 2017-09-11 13:49:06

最后一个点re

ac 应该是120800

而我的是123400

求dalao解答

#include<bits/stdc++.h>
using namespace std;
int f[65][3],m,n;
int zu[65][3];
int num[32000];
int main()
{
    scanf("%d%d",&m,&n);
    m=m/10;
    for(int i=1;i<=n;i++)
    {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        f[i][0]=c;//roup
        f[i][1]=a*b;//value
        f[i][2]=a/10;//price
        if(f[i][0]!=0)
         {
             int u=f[i][0];
             if(zu[u][1]==0)
             zu[u][1]=i;
             else zu[u][2]=i;
             }
    }
    for(int i=1;i<=n;i++)
     for(int j=m;j>=f[i][2];j--)
      {
          if(f[i][0]!=0)continue;
        num[j]=max(num[j],num[j-f[i][2]]+f[i][1]);
          int a1=zu[i][1],a2=zu[i][2];
        if(a1!=0&&j>=f[i][2]+f[a1][2])
           num[j]=max(num[j],num[j-f[i][2]-f[a1][2]]+f[i][1]+f[a1][1]);
        if(a2!=0&&j>=f[i][2]+f[a2][2])
           num[j]=max(num[j],num[j-f[i][2]-f[a2][2]]+f[i][1]+f[a2][1]);
        if(a1!=0&&a2!=0&&j>=f[i][2]+f[a1][2]+f[a1][2])
           num[j]=max(num[j],num[j-f[i][2]-f[a1][2]-f[a2][2]]+f[a2][1]+f[i][1]+f[a1][1]);
        //printf("%d\n",&nu)
      }
    printf("%d",num[m]);
    return 0;
}

by 萝卜 @ 2017-09-11 14:21:45

数组开大些试试。

一般RE就这么干。


|