• hdu 2452+hdu 1501


     题目链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=2452

    http://acm.hdu.edu.cn/showproblem.php?pid=1501

    记忆化搜索。。。说的简单点,就是dfs+状态标记。。。

    View Code
     1 #include<iostream>
     2 #include<vector>
     3 const int MAXN=10000+10;
     4 const int inf=1<<30;
     5 using namespace std;
     6 int n,m,f;
     7 vector<int>mp[MAXN];
     8 int value[MAXN];
     9 int In[MAXN],Out[MAXN];
    10 int dp[MAXN][2];
    11 
    12 int dfs(int now,int mark){
    13     //vector做决定
    14     if(mark==1){
    15         if(dp[now][1]!=-1){
    16             return dp[now][1];
    17         }
    18         int MAX=0;
    19         for(int i=0;i<mp[now].size();i++){
    20             int ans=dfs(mp[now][i],0);//状态发生变化
    21             if(ans>MAX)MAX=ans;
    22         }
    23         dp[now][1]=MAX+value[now];
    24         return dp[now][1];
    25     }else {
    26         if(dp[now][0]!=-1){
    27             return dp[now][0];
    28         }
    29         int MIN=inf;
    30         for(int i=0;i<mp[now].size();i++){
    31             int ans=dfs(mp[now][i],1);
    32             if(ans<MIN)MIN=ans;
    33         }
    34         if(MIN==inf)dp[now][0]=value[now];
    35         else dp[now][0]=MIN+value[now];
    36         return dp[now][0];
    37     }
    38 }
    39 
    40 int main(){
    41     while(~scanf("%d%d%d",&n,&m,&f)){
    42         memset(In,0,sizeof(In));
    43         memset(Out,0,sizeof(Out));
    44         memset(dp,-1,sizeof(dp));
    45         for(int i=1;i<=n;i++){
    46             scanf("%d",&value[i]);
    47             mp[i].clear();
    48         }
    49         for(int i=1;i<=m;i++){
    50             int x,y;
    51             scanf("%d%d",&x,&y);
    52             In[y]++,Out[x]++;
    53             mp[x].push_back(y);
    54         }
    55         int start=1;
    56         //找入口
    57         for(int i=1;i<=n;i++)if(In[i]==0){
    58             start=i;
    59             break;
    60         }
    61         int ans=dfs(start,1);//1-vector,0-glory;
    62         if(ans>=f){
    63             printf("Victory\n");
    64         }else 
    65             printf("Glory\n");
    66     }
    67     return 0;
    68 }
    View Code
     1 #include<iostream>
     2 #include<cstring>
     3 const int MAXN=222;
     4 using namespace std;
     5 int len1,len2,len;
     6 char str1[MAXN],str2[MAXN],str[MAXN<<1];
     7 bool mark[MAXN][MAXN];
     8 
     9 
    10 bool dfs(int pos1,int pos2,int pos){
    11     if(pos==len){
    12         return true;
    13     }
    14     if(mark[pos1][pos2])return false;
    15     mark[pos1][pos2]=true;
    16     if(str1[pos1]==str[pos]){
    17         if(dfs(pos1+1,pos2,pos+1))return true;
    18     }
    19     if(str2[pos2]==str[pos]){
    20         if(dfs(pos1,pos2+1,pos+1))return true;
    21     }
    22     return false;
    23 }
    24 
    25 
    26 int main(){
    27     int _case,k=1;
    28     scanf("%d",&_case);
    29     while(_case--){
    30         scanf("%s%s%s",str1,str2,str);
    31         printf("Data set %d: ",k++);
    32         len1=strlen(str1);
    33         len2=strlen(str2);
    34         len=strlen(str);
    35         memset(mark,false,sizeof(mark));
    36         if(len1+len2!=len){
    37             printf("no\n");
    38         }else if(dfs(0,0,0)){
    39             printf("yes\n");
    40         }else 
    41             printf("no\n");
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    PHP 缓存技术
    redis雪崩
    【Redis】- 缓存击穿
    Memcache 与 Memcached 的区别
    数据库设计:范式与反范式
    Thinkphp5多数据库切换
    PHP 分布式集群中session共享问题以及session有效期的设置
    Nginx使用upstream实现动静分离
    rsync 服务快速部署手册
    tp5 为什么使用单例模式
  • 原文地址:https://www.cnblogs.com/wally/p/3006147.html
Copyright © 2020-2023  润新知