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
  • 相关阅读:
    Vue知识总结
    Excel使用技巧
    java框架总结
    java反射学习总结
    java虚拟机
    vue学习知识
    mysql索引知识
    前端函数定义及表格总结
    SpringMVC异常处理
    restful风格的概念
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/7811185.html
Copyright © 2011-2022 走看看