uva 10817 Headmaster's Headache 出发dp 位计算

uva 10817 Headmaster's Headache 出发dp 位计算

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

出发dp,用在一些议题的操作非常~ 

给出s个课程。m个教师。n个求职者,教师必须招聘。然后招聘一些求职者,使得每一门课都至少有两个老师能教。问题就转换成了招聘哪些求职者使得花费最少。由于s范围小于8。则能够用二进制表示,用集合s1表示恰好有一个人教的课的集合,用集合s2表示有两个人教的课的集合,则每次状态转移即为选择这名求职者还是不选(教师必须选)详细看代码。

 

d(i,s1,s2) = min{ d(i+1,s1′,s2′)+c[i],d(i+1,s1,s2)} 第一项表示聘用,第二项表示不聘用。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define mem(name,value) memset(name,value,sizeof(name))
#define FOR(i,n) for(int i=1;i<=n;i++)
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=130;
const int maxs=8;
int n,m,s,d[maxn][1<<maxs][1<<maxs],st[maxn],c[maxn];//st表示第i个人能够教的课程的集合。c表示花费
void init(){
    mem(d,-1); mem(st,0); mem(c,0);
    for(int i=0;i<m+n;i++){
        scanf("%d",c+i);
        while(1){
            int t; char c1;
            scanf("%d",&t);
            st[i] |= (1<<(t-1));
            c1 = getchar();
            if(c1=='\n') break;
        }
    }
}
int dp(int i,int s0,int s1,int s2){ //s0 表示恰好一个人都没有教的课的集合。也能够用s1和s2算出来。
    if(i==m+n) return s2==(1<<s)-1?0:inf;
    //假设已经考虑到第m+n个人了,编号是1~m+n-1,则人已经选完。若s2集合中没有全部课。则不符合题意。
    int& ans = d[i][s1][s2];
    if(ans!=-1) return ans;
    ans = inf;
    if(i>=m) ans = dp(i+1,s0,s1,s2);    //仅仅有当选择求职者的时候才用考虑是否聘用。

int m0 = st[i]&s0, m1 = st[i]&s1; //m0表示在一个人都没有教的课中,第i个人能够教哪些,m1同理。

s0=s0^m0; s1=(s1^m1)|m0; s2=s2|m1; //将s0中有人教的课去掉。算到s1上。s2同理 ans = min(ans,c[i]+dp(i+1,s0,s1,s2)); //和不聘用的价格比較 return ans;}int main(){ // freopen("in.txt","r",stdin); while(~scanf("%d%d%d",&s,&m,&n) && s && m &&n){ init(); int ans = dp(0,(1<<s)-1,0,0); //答案为还没考虑不论什么一个人,和没有不论什么一门课有人教 printf("%d\n",ans); } return 0;}

 

 

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117670.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月2日 上午7:00
下一篇 2022年1月2日 上午8:00


相关推荐

  • 基于麦克风阵列的现有声源定位技术有_阵列原理

    基于麦克风阵列的现有声源定位技术有_阵列原理专利名称:使用麦克风阵列对声源定位的方法技术领域:本发明涉及声源的定位,更具体地讲,涉及一种使用麦克风(MIC)阵列来对声源定位的方法。背景技术:阵列信号处理已经广泛应用于通信、雷达、声纳、医学和航天航空等诸多领域。近年来,随着反恐战的开展,各国已经研制了各种探测爆炸点或枪炮射击点的位置的设备。在实际应用中,由于视觉定位往往不易实现,从而发展了一些声学定位的系统,例如,美国的回力棒系统、以…

    2026年2月18日
    5
  • 目标检測的图像特征提取之(一)HOG特征

    目标检測的图像特征提取之(一)HOG特征

    2021年12月3日
    46
  • spring boot jedis_spring整合redis详解

    spring boot jedis_spring整合redis详解1.1.Jedis所需要的jar包redis.clientsjedis3.2.01.1.连接Redis注意事项 禁用Linux的防火墙:Linux(CentOS7)里执行命令systemctlstop/disablefirewalld.serviceredis.conf中注释掉bind127.0.0.1,然后protected-modeno1.2.Jedis常用操作1.2.1.创建动态的工程1.2.1.创建测试程序publicstat

    2025年10月15日
    3
  • pycharm2021 激活码_通用破解码[通俗易懂]

    pycharm2021 激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    90
  • pr-常用操作

    pr-常用操作

    2021年5月17日
    119
  • 计算机网络-划分子网 四大类必会题型

    计算机网络-划分子网 四大类必会题型必记知识点A类:0~126,默认子网掩码:255.0.0.0B类:128~191,默认子网掩码:255.255.0.0C类:192~223,默认子网掩码:255.255.255.0子网地址:网络号(照抄)+子网号(照抄)+主机号(全为0)广播地址:网络号(照抄)+子网号(照抄)+主机号(全为1)子网掩码:网络号(全为1)+子网号(全为1)+主机号(全为0)IP地址总数:根据主机号的位数得出可分配IP地址总数:主机数(IP地址总数-2)(减去全0和全1的

    2022年6月27日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号