UVA——10130SuperSale

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1071


  简单0 1问题,先输入一个T,表示测试数据组数,然后对于每组数据,输入所有可能的P和W,然后是相应的人数,找出每个人选择的最大值,然后相加,即为所求结果。


#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#include<stdlib.h>
#include<string>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<list>
#include<queue>
#include<stack>
#include<iomanip>
#include<numeric>
//#include <istream>     //基本输入流
//#include <ostream>     //基本输出流
//#include <sstream>     //基于字符串的流
//#include <utility>     //STL 通用模板类
//#include <complex.h>   //复数处理
//#include <fenv.h>    //浮点环境
//#include <inttypes.h>  //整数格式转换
//#include <stdbool.h>   //布尔环境
//#include <stdint.h>   //整型环境
//#include <tgmath.h>   //通用类型数学宏
#define L(a,b,c) for(int a = b;a >= c;a --)
#define M(a,b,c) for(int a = b;a <= c;a ++)
#define N(a,b) memset(a,b,sizeof(a));
#define MAXX(a,b)   ((a)>(b)?a:b)
#define MINN(a,b)   ((a)<(b)?a:b)
const int MAX=1<<30;
const int MIN=-MAX;

using namespace std;
struct data
{
    int x;
    int y;
} a[1010];
int dp[10000];
int main()
{
    int T,n,m;
    cin>>T;
    while(T--)
    {
        cin>>n;
        for(int i=1; i<=n; i++)
            cin>>a[i].x>>a[i].y;
        cin>>m;
        int sum=0,t;
        for(int i=1; i<=m; i++)
        {
            N(dp,0)
            cin>>t;
            for(int j=1; j<=n; j++)
            {
                for(int k=t; k>=a[j].y; k--)
                    dp[k]=max(dp[k],dp[k-a[j].y]+a[j].x);
            }
            sum+=dp[t];
        }
        cout<<sum<<endl;
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值