Uva 10130 - SuperSale
// Accepted
/// Header file begin #include <iostream> #include <cstdio> #include <cstring> #include <map> #include <string> #include <vector> #include <cmath> #include <cctype> #include <sstream> #include <set> #include <list> #include <stack> #include<utility> #include <queue> #include <algorithm> /// End //.......... /// Macro #define sf scanf #define pf printf #define sfint(a,b) scanf("%d %d",&a,&b) #define sfl(a,b) scanf("%ld %ld",&a,&b) #define sfll(a,b) scanf("%lld %lld",&a,&b) #define sfd(a,b) scanf("%lf %lf",&a,&b) #define sff(a,b) scanf("%f %f",&a,&b) #define lp1(i,n) for(i=0;i<n;i++) #define lp2(i,n) for(i=1;i<=n;i++) #define mem(c,v) memset(c,v,sizeof(c)) #define cp(a) cout<<" "<<a<<" " #define nl puts("") #define sq(x) ((x)*(x)) #define all(x) x.begin(),x.end() #define reall(x) x.rbegin(),x.rend() #define sz size() #define gc getchar() #define pb push_back /// End......... /// Size #define mx7 20000100 #define mx6 1500000 #define mx5 100005 #define mx4 1000100 #define inf 1<<30 //infinity value #define eps 1e-9 #define mx (65540) #define mod 1000000007 #define pi acos(-1.0) /// Macros for Graph #define white 1 #define gray 2 #define black 3 #define nil 0 using namespace std; /***************/ /// typedef typedef long long LL; typedef long L; typedef unsigned long long ull; typedef unsigned long ul; typedef unsigned int ui; typedef pair<int, int> pii; typedef vector<int>vi; typedef vector<long long> vll; typedef vector<long>vl; typedef vector<char>vch; typedef vector<string>vs; typedef map<int,int>mpii; typedef map<int,bool>mpbi; typedef map<long,bool>mpbl; typedef map<long long,bool>mpbll; typedef map<char,int>mpci; typedef map<char,bool>mpbc; typedef map<string,int>mpsi; typedef map<long long,long long>mpll; /// template template<class T> T gcd(T a, T b ) {return b<=0?a:gcd(b,a%b);} template<class T> T large(T a, T b ) {return a>b?a:b;} template<class T> T small(T a, T b ) {return a<b?a:b;} template<class T> T diffrnce(T a, T b) {return a-b<0?b-a:a-b;} struct my { int price,weight; }; my ar[1001]; int max_weight[1001],dp[10001][10001]; int knapsack(int ob, int mw) { for(int i=1;i<=ob;i++) { for(int j=1;j<=mw;j++) { if(ar[i].weight <= j) { int a=dp[i-1][j], b=ar[i].price+dp[i-1][j-ar[i].weight]; if(a >= b) { dp[i][j] = a; } else { dp[i][j] = b; } } else { dp[i][j] = dp[i-1][j]; } } } return dp[ob][mw]; } int main() { int testcase,object,group; sf("%d",&testcase); while(testcase--) { LL sum=0; sf("%d",&object); for(int i=1;i<=object;i++) { sf("%d %d",&ar[i].price,&ar[i].weight); } sf("%d",&group); int len=0; for(int i=0;i<group;i++) { int x; sf("%d",&x); max_weight[len++] = x; } for(int i=0;i<len;i++) { sum+=knapsack(object, max_weight[i]); } pf("%lld\n",sum); } return 0; }
Comments
Post a Comment