zoukankan      html  css  js  c++  java
  • 分组背包(每组至少选择一件物品)

    题意:有n双鞋,a,b,c分别代表型号,价格和舒适度,当拥有m元时,每个型号的鞋至少买一双的最大舒适度是多少?

    #include"stdio.h"
    #include"string.h"
    #include"stdlib.h"
    #include"algorithm"
    #include"math.h"
    #include"vector"
    #define M 109
    #define inf -0x3f3f3f3f
    #define eps 1e-10
    #define PI acos(-1.0)
    using namespace std;
    int dp[19][10009];
    struct node
    {
        int v,p;
        node(){}
        node(int vv,int pp){v=vv;p=pp;}
    };
    vector<node>s[M];
    int main()
    {
        int n,m,K,i,a,b,c,j,k;
        while(scanf("%d%d%d",&n,&m,&K)!=-1)
        {
            for(i=0;i<=K;i++)
                s[i].clear();
            for(i=1;i<=n;i++)
            {
                scanf("%d%d%d",&a,&b,&c);
                s[a].push_back(node(b,c));
            }
            int flag=0;
            for(i=1;i<=K;i++)
            {
                if((int)s[i].size()==0)
                    flag++;
            }
            if(flag)
            {
                printf("Impossible
    ");
                continue;
            }
            memset(dp,-1,sizeof(dp));
            for(i=0;i<=m;i++)
                dp[0][i]=0;
            for(i=1;i<=K;i++)
            {
                for(j=0;j<(int)s[i].size();j++)
                {
                    int v=s[i][j].v;
                    int p=s[i][j].p;
                    for(k=m;k>=v;k--)
                    {
                        if(dp[i-1][k-v]!=-1)
                        {
                            dp[i][k]=max(dp[i][k],dp[i][k-v]+p);
                            dp[i][k]=max(dp[i][k],dp[i-1][k-v]+p);
                        }
                    }
                }
            }
            /*for(i=1;i<=K;i++)
            {
                for(j=0;j<=m;j++)
                    printf("%d %d %d
    ",i,j,dp[i][j]);
            }*/
            if(dp[K][m]<0)
                printf("Impossible
    ");
            else
            printf("%d
    ",dp[K][m]);
    
        }
        return 0;
    }
    


  • 相关阅读:
    哇,博客开通啦
    前端与后端数据交互的方式之ajax
    apply()方法和call()方法
    元素居中的方法
    JS中兼容问题的汇总
    关于元素尺寸问题的汇总
    小案例之随机点名系统
    圣杯布局与双飞翼布局
    js自动分页加载所有数据
    浏览器工作流程
  • 原文地址:https://www.cnblogs.com/mypsq/p/4348099.html
Copyright © 2011-2022 走看看