uva 10817 紫书 例9-15

本文探讨动态规划(DP)的两种应用方式:模拟与大化小策略,并通过UVA10817题实例解析DP状态转移过程,深入浅出地介绍了DP算法的设计思路。



谈一下自己对dp的想法。

dp的感觉就分两种  1.模拟,根着题目的意思一个个选择(dfs);就像本题一个个选择老师;

                                   2.大化小,紫书习题3 切蛋糕,和习题4 flod 字符串,就好。

dp的状态,就像函数里的自变量,dp的值就像函数的自变量。


剩下的紫书就讲的很详细了


//uva 10817
//紫书 第9章 例15
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<sstream>
#include<cstring>
#include<string>
using namespace std;
const int maxn=100+25;
const int inf =0x3f3f3f3f;
int p[maxn];
int ret[maxn];
int s,n,m;
int N;
int dp[1<<10][1<<10][maxn];

int dfs(int s0,int s1,int s2,int pos)
{
    if(pos==N)
    {
       return s2==(1<<s)-1 ? 0:inf;
    }

    if(dp[s1][s2][pos]!=-1)
    {
        return dp[s1][s2][pos];
    }

    dp[s1][s2][pos]=inf;
    if(pos>=m)
    dp[s1][s2][pos]=dfs(s0,s1,s2,pos+1);

    //if(pos>=m)
    //
        int m0,m1;
        m0=s0&ret[pos];
        m1=s1&ret[pos];
        int t0,t1,t2;
        t0=s0^m0;
        t1=s1^m1|m0;                                  /*akfjcasjk*/
        t2=s2|m1;
        dp[s1][s2][pos]=min(dp[s1][s2][pos],dfs(t0,t1,t2,pos+1)+p[pos]);
    //}

    return dp[s1][s2][pos];
}
int main()
{
    string str;
   // printf("%d\n",inf);
    while(scanf("%d",&s)!=EOF)
    {
        if(s==0) break;
        scanf("%d %d",&m,&n);
        if(s==0 && m==0 && n==0) break;
        N=n+m;

        for(int i=0;i<N;i++)
        {
//re[i].clear();

            scanf("%d",&p[i]);

            getline(cin,str);
            stringstream s(str);

            int t;
            ret[i]=0;
            while(s>>t)
            {
                t--;
                ret[i]=ret[i]|(1<<t);
            }
            //cout<<ret[i]<<endl;
        }

//        for(int i=0;i<n+m;i++)
//        {
//            for(int j=0;j<re[i].size();j++)
//            {
//                cout<<re[i][j]<<" ";
//            }
//            cout<<endl;
//        }
          memset(dp,-1,sizeof(dp));
        int ans=dfs((1<<s)-1,0,0,0);
        printf("%d\n",ans);
      //  cout<<m<<n<<endl;
    }
    return 0;
}


//很经典的一题
























内容概要:本文档是一份关于交换路由配置的学习笔记,系统地介绍了网络设备的远程管理、交换机与路由器的核心配置技术。内容涵盖Telnet、SSH、Console三种远程控制方式的配置方法;详细讲解了VLAN划分原理及Access、Trunk、Hybrid端口的工作机制,以及端口镜像、端口汇聚、端口隔离等交换技术;深入解析了STP、MSTP、RSTP生成树协议的作用与配置步骤;在路由部分,涵盖了IP地址配置、DHCP服务部署(接口池与全局池)、NAT转换(静态与动态)、静态路由、RIP与OSPF动态路由协议的配置,并介绍了策略路由和ACL访问控制列表的应用;最后简要说明了华为防火墙的安全区域划分与基本安全策略配置。; 适合人群:具备一定网络基础知识,从事网络工程、运维或相关技术岗位1-3年的技术人员,以及准备参加HCIA/CCNA等认证考试的学习者。; 使用场景及目标:①掌握企业网络中常见的交换与路由配置技能,提升实际操作能力;②理解VLAN、STP、OSPF、NAT、ACL等核心技术原理并能独立完成中小型网络搭建与调试;③通过命令示熟悉华为设备CLI配置逻辑,为项目实施和故障排查提供参考。; 阅读建议:此笔记以实用配置为主,建议结合模拟器(如eNSP或Packet Tracer)动手实践每一条命令,对照拓扑理解数据流向,重点关注VLAN间通信、路由选择机制、安全策略控制等关键环节,并注意不同设备型号间的命令差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值