UVA——10130SuperSale

来源:互联网 发布:centos安装raid驱动 编辑:程序博客网 时间:2024/06/05 12:45

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
原创粉丝点击