• Headmaster's Headache UVA


    Headmaster's Headache

     UVA - 10817

    题意:s个科目,n个必须聘用的老师,m个可选的老师,问每个科目至少两个老师教的最少支出工资。

    科目不大于8,考虑状压~

     1 #include <cstdio>
     2 #include <bits/stdc++.h>
     3 using namespace std;
     4 const int INF= 0x3f3f3f3f;
     5 const int maxn=125;
     6 const int maxx=8;
     7 int m,n,s;
     8 int c[maxn],st[maxn],d[maxn][1<<maxx][1<<maxx];
     9 
    10 int dp(int i,int s0,int s1,int s2)
    11 {
    12     if(i==m+n) return s2==(1<<s)-1 ? 0 : INF;
    13     int &ans=d[i][s1][s2];
    14     if(ans>=0) return ans;
    15     ans=INF;
    16     if(i>=m) ans=dp(i+1,s0,s1,s2);  //不选
    17     int m0=st[i]&s0;
    18     int m1=st[i]&s1;
    19     s0^=m0;
    20     s1=(s1^m1)|m0;
    21     s2|=m1;
    22     ans=min(ans,c[i]+dp(i+1,s0,s1,s2)); //
    23     return ans;
    24 }
    25 int main()
    26 {
    27     while(scanf("%d%d%d",&s,&m,&n)&&(s||m||n))
    28     {
    29         memset(d,-1,sizeof(d));
    30         getchar();
    31         for(int i=0;i<m+n;i++)
    32         {
    33             st[i]=0;
    34             string line;
    35             int x;
    36             getline(cin,line);
    37             stringstream ss(line);
    38             ss>>c[i];
    39             while(ss>>x)
    40             {
    41                 x--;
    42                 st[i]|=(1<<x);
    43             }
    44            // cout<<"能教的科目为: ";
    45             //for(int j=0;j<s;j++) if(st[i]&(1<<j)) cout<<j+1<<' ';
    46             //cout<<endl;
    47         }
    48         printf("%d
    ",dp(0,(1<<s)-1,0,0));
    49     }
    50     return 0;
    51 
    52 }
    View Code
  • 相关阅读:
    mybaits不能出现小于号
    结合rpyc使用python实现动态升级的方法
    secureCRT使用小贴士
    大数据的实时技术
    gnuplot使用
    Python3.4使用MySql
    Linux内存分配----SLAB
    WinInet:HTTPS 请求出现无效的证书颁发机构的处理
    正则表达式学习
    C++中static的全部作用
  • 原文地址:https://www.cnblogs.com/yijiull/p/7421925.html
Copyright © 2020-2023  润新知