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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java环境变量PATH和CLASSPATH

    Java环境变量PATH和CLASSPATHJava开发中常用到环境变量的配置,下面简单介绍下Java中经常配置的环境变量:PATH和CLASSPATH。1、PATH环境变量1.1作用简介安装完JDK(JavaDevelopmentKit,Java开发套件)之后,可以在安装目录下找到两个子目录(bin目录和lib目录)。bin目录中包含着Java编译器等可执行文件。如果要运行执行java命令,必须得执行java命令对应的可执行文件的路径

    2022年6月21日
    29
  • 前端开发技术(vscode怎么下载)

    前言   在前端开发中,有一个非常好用的工具,VisualStudioCode,简称VScode。   都不用我安利VScode,大家就会乖乖的去用,无数个大言不惭的攻城狮,都被VScode比德芙还丝滑的强大功能所折服。   我是来给大家安利插件的,想做个比较全面的插件集合给大家。网上的我也看过一些,但是都比较零散,时间也久了一些,我结合最近的情况,总结一下,造福大家,才是我…

    2022年4月10日
    55
  • 【Python技巧】:pip卸载后,如何安装pip[通俗易懂]

    【Python技巧】:pip卸载后,如何安装pip[通俗易懂]【Python技巧】:pip卸载后,如何安装pip

    2022年10月19日
    3
  • rcnn算法详解_rcnn目标检测

    rcnn算法详解_rcnn目标检测这是一篇比较早的ObjectDetection算法,发表在2014年的CVPR,也是R-CNN系列算法的开山之作,网上可以搜到很多相关的博客讲解,本篇博文没有按论文顺序来讲述,而是结合自己经验来看这个算法,希望给初学者一个直观的感受,细节方面不需要太纠结,因为很多部分在后来的算法中都改进了。论文:Richfeaturehierarchiesforaccurateobjectdetect

    2025年10月6日
    3
  • 汇编指令速查「建议收藏」

    汇编指令速查「建议收藏」指令功能AAA调整加AAD调整除AAM调整乘AAS调整减ADC进位加ADD加AND与ARPL调整优先级BOUND检查数组BSF位右扫描BSR位左扫描BSWAP交换字节BT位测试BTC位测试求反BTR位

    2022年7月2日
    46
  • python读取modis数据

    python读取modis数据本期记录只上干活,废话不多说,主要是后面与HEG配合使用,实现一系列研究与反演操作。python环境:Python3.5.2+Pycharm模块包:pyhdf安装方法(命令行输入):pipinstallpyhdf一、获取hdf数据集:frompyhdf.SDimportSDHDF_FILR_URL=”E:\Persona_project\Py-Pro…

    2022年5月30日
    36

发表回复

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

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