zoukankan      html  css  js  c++  java
  • hihocoder #1486 : 物品价值

    dp[i][j]  到第i个物品 状态为 j 的二进制串 能得到的最大价值 

    #include<cstdio>
    #include<cstring>
    #include<map>
    #include<iostream>
    #include<algorithm>
    #include<math.h>
    #include<map>
    #include<queue>
    #include<set>
    #include<vector>
    using namespace std;
    
    
    #define inf  1000000007
    #define ll long long
    #define MAXN  1010
    
    int dp[MAXN][(1<<10)+10];
    
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n,m;
            scanf("%d%d",&n,&m);
            int ed=1<<m;
            for(int i=0;i<=n;i++)
            {
                for(int j=0;j<=ed;j++)
                    dp[i][j]=-inf;
            }
            dp[0][0]=0;
            int d=ed-1;
            for(int i=1;i<=n;i++)
            {
                int w,k;
                scanf("%d%d",&w,&k);
                int a=0;
                for(int j=1;j<=k;j++)
                {
                    int b;
                    scanf("%d",&b);
                    b--;
                    a=a+(1<<b);
                }
                for(int j=0;j<=d;j++)
                {
                    dp[i][j^a]=max(dp[i-1][j]+w,dp[i][j^a]);
                    dp[i][j]=max(dp[i-1][j],dp[i][j]);
                }
            }
            int mx=0;
            mx=max(mx,dp[n][d]);
            cout<<mx<<endl;
        }
        return 0;
    }
    #include<cstdio>
    #include<cstring>
    #include<map>
    #include<iostream>
    #include<algorithm>
    #include<math.h>
    #include<map>
    #include<queue>
    #include<set>
    #include<vector>
    using namespace std;
    
    
    #define inf  1000000007
    #define ll long long
    #define MAXN  1010
    
    int dp[MAXN][(1<<10)+10];
    
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n,m;
            scanf("%d%d",&n,&m);
            int ed=1<<m;
            for(int i=0;i<=n;i++)
            {
                for(int j=0;j<=ed;j++)
                    dp[i][j]=-inf;
            }
            dp[0][0]=0;
            int d=ed-1;
            for(int i=1;i<=n;i++)
            {
                int w,k;
                scanf("%d%d",&w,&k);
                int a=0;
                for(int j=1;j<=k;j++)
                {
                    int b;
                    scanf("%d",&b);
                    b--;
                    a=a+(1<<b);
                }
                for(int j=0;j<=d;j++)
                {
                    dp[i][j^a]=max(dp[i-1][j]+w,dp[i][j^a]);
                    dp[i][j^a]=max(dp[i-1][j^a],dp[i][j^a]);
                }
            }
            int mx=0;
            mx=max(mx,dp[n][d]);
            cout<<mx<<endl;
        }
        return
  • 相关阅读:
    Golang:命令行框架cobra简介
    kafka集群管理工具kafkamanager
    GAN 简介
    部分梯度下降算法简述
    EfficientNet 简介
    数据库查表空间Oracel、Vertica
    Vue 组件自动注册
    使用jmeter+操作BeanShell调用java生成jar包实例
    ACCESS数据库中SQL语句,数字不必加'123'
    反射取得静态类中的属性,方法,字段
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/7811185.html
Copyright © 2011-2022 走看看