当前位置:编程学习 > C/C++ >>

10130 - SuperSale

[cpp]
描述:水题不解释 
#include <cstdio>  
#include <cstring>  
int t,n,m,sum,p,q; 
int arr[1010][2],w[110],v[50010][2]; 
int main() 

   // freopen("a.txt","r",stdin);  
    scanf("%d",&t); 
    while(t--) 
    { 
        scanf("%d",&n); 
        for(int i=0; i<n; i++) scanf("%d %d",&arr[i][0],&arr[i][1]); 
        scanf("%d",&m); 
        sum=0; 
        for(int i=0; i<m; i++) 
        { 
            scanf("%d",&w[i]); 
            if(w[i]>sum) sum=w[i]; 
        } 
        memset(v,0,sizeof(v)); 
        v[0][0]=1; 
        for(int i=0; i<n; i++) 
            for(int j=sum-1; j>=0; j--) if(v[j][0]) 
                { 
                    p=j+arr[i][1]; 
                    q=v[j][1]+arr[i][0]; 
                    if(p<=sum&&q>v[p][1]) 
                    { 
                        v[p][0]=1; 
                        v[p][1]=q; 
                    } 
                } 
        p=0; 
        for(int i=0; i<m; i++) 
        { 
            q=0; 
            for(int j=w[i]; j>=0; j--) 
                if(v[j][0]&&v[j][1]>q) q=v[j][1]; 
            p+=q; 
        } 
        printf("%d\n",p); 
    } 
    return 0; 

描述:水题不解释
#include <cstdio>
#include <cstring>
int t,n,m,sum,p,q;
int arr[1010][2],w[110],v[50010][2];
int main()
{
   // freopen("a.txt","r",stdin);
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i=0; i<n; i++) scanf("%d %d",&arr[i][0],&arr[i][1]);
        scanf("%d",&m);
        sum=0;
        for(int i=0; i<m; i++)
        {
            scanf("%d",&w[i]);
            if(w[i]>sum) sum=w[i];
        }
        memset(v,0,sizeof(v));
        v[0][0]=1;
        for(int i=0; i<n; i++)
            for(int j=sum-1; j>=0; j--) if(v[j][0])
                {
                    p=j+arr[i][1];
                    q=v[j][1]+arr[i][0];
                    if(p<=sum&&q>v[p][1])
                    {
                        v[p][0]=1;
                        v[p][1]=q;
                    }
                }
        p=0;
        for(int i=0; i<m; i++)
        {
            q=0;
            for(int j=w[i]; j>=0; j--)
                if(v[j][0]&&v[j][1]>q) q=v[j][1];
            p+=q;
        }
        printf("%d\n",p);
    }
    return 0;
}

 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,