zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    iOS-MD5加密、SHA1加密
    iOS-AFNetworking参数和多文件同时上传【多文件上传】
    iOS-CocoaPods安装及使用
    Python Queue模块
    Python socket编程
    python select epoll poll的解析
    python redis使用
    python executemany的使用
    python 三层架构说明
    Python isinstance
  • 原文地址:https://www.cnblogs.com/yijiull/p/7421925.html
Copyright © 2011-2022 走看看