zoukankan      html  css  js  c++  java
  • 7.2集训模拟赛(莫名其妙的比赛......)

    A.小猫爬山:(状压★★★)

    题目描述:

    输入格式:

     输出格式:

     样例:

    样例输入:

     样例输出:

     数据范围与提示:

     分析:

    这道题我神之迷惑~~~~链接教练博客(神之迷惑)

    呃......不迷惑了,贴上新代码

    Code新:

    f数组记录状态为s时最少的花费,leave记录状态为s是最后一个缆车的剩余空间。

    #include<bits/stdc++.h>
    using namespace std;
    int n,w;
    int a[20];
    int f[1<<19],leave[1<<19];
    
    int main(){
        scanf("%d%d",&n,&w);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        memset(f,0x3f,sizeof(f));
        f[0]=1;
        leave[0]=w;
        int maxn = 1<<n;
        for(int s = 0;s < maxn; s++){
            for(int i = 1 ; i <= n;i++){
                if(leave[s]>=a[i] && f[s|(1<<(i-1))]>=f[s]){//如果最后一个缆车能装下
                    f[s|(1<<(i-1))]=f[s];//更新
                    leave[s|(1<<(i-1))]=max(leave[s|(1<<(i-1))],leave[s]-a[i]);//
                }
                else if(leave[s]<a[i] && f[s|(1<<(i-1))]>=f[s]+1){//最后一个缆车装不下
                    f[s|(1<<(i-1))]    = f[s]+1;
                    leave[s|(1<<(i-1))] = max(w-a[i],leave[s|(1<<(i-1))]);
                }
            }
        }
        printf("%d",f[maxn-1]);
        return 0;
    }

    Code:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=20;
    int n,w;
    int a[N];
    int ans;
    int f[1<<18];
    int main(){
        scanf("%d%d",&n,&w);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        memset(f,0x3f,sizeof(f));
        int maxn=1<<n;
        f[0]=0;
        //f[1]=0;
        for(ans=1;ans;ans++){
            for(int i=0;i<maxn;i++){
                if(f[i]<=w)f[i]=0;
            }
            for(int i=0;i<maxn;i++){
                if(f[i]<w){
                    for(int j=1;j<=n;j++){
                        if(!((i>>(j-1))&1)){
                            f[i|(1<<(j-1))]=min(f[i|(1<<(j-1))],f[i]+a[j]);
                        }
                    }
                }
            }
            if(f[maxn-1]<=w){
                printf("%d
    ",ans);
                //return 0;
                break;
            }
        }
        return 0;
    }

     B.猴腮雷:(树形dp★★★)

    题目描述:

    输入格式 :

     输出格式:

     样例:

    样例输入:

     样例输出:

     数据范围与提示:

    Code:

    #include<bits/stdc++.h>
    using namespace std;
    const int n=6010;
    int N,r[n];
    int head[n];
    int cnt;
    int rd[n];
    struct Node{
        int v;
        int ne;
    }e[n<<1];
    int f[n][2];
    void add(int u,int v){
        e[++cnt].v=v;
        e[cnt].ne=head[u];
        head[u]=cnt;
    }
    
    void dfs(int rt){
        for(int i=head[rt];i;i=e[i].ne){
            int v=e[i].v;
            dfs(v);
            f[rt][0]+=max(f[v][0],f[v][1]);
            f[rt][1]+=f[v][0];
        }
        f[rt][1]+=r[rt];
    }
    int k;
    int main(){
        scanf("%d",&N);
        for(int i=1;i<=N;i++){
            scanf("%d",&r[i]);
        }
        while(1){
            int x,y;
            scanf("%d%d",&x,&y);
            rd[x]++;
            if(x!=0&&y!=0){
                add(y,x);
            } else {
                break;
            }
        }
        //int rt=0;
        for(int i=1;i<=N;i++){
            if(rd[i]==0)k=i;
        }
        dfs(k);
        printf("%d
    ",max(f[k][0],f[k][1]));
        return 0;
    }

    C. 小烈送菜:

    题目描述:

    输入格式 :

     输出格式:

     样例:

    样例输入:

     样例输出:

     数据范围与提示:

    分析:

    Code:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=2500+5;
    int a[N],f[N][N];
    
    int main(){
        int n , ans = 0;
        scanf("%d",&n); 
        for(int i = 1; i <= n; i++)
            scanf("%d",&a[i]);
        for(int i = 1; i <= n; i++){
            for(int j = 1; j < i; j++){
                f[i+1][j]=max(f[i+1][j],f[i][j]+a[i]*a[i+1]);
                f[i+1][i]=max(f[i+1][i],f[i][j]+a[j]*a[i+1]);
            }
        }
        for(int i = 0; i < n; i++)
            ans =max(ans, f[n][i] + a[n] * a[i]);
        printf("%d
    ",ans); 
        return 0;
    }

     D. Siano:

    题目描述:

     输入格式:

     样例:

    样例输入:

     样例输出:

     数据范围与提示:

     Code:

    waiting。。。。。。

  • 相关阅读:
    转载、收藏
    AndroidStudio 问题收集
    android4.4 添加快捷开关(以截屏为例)
    打开USB调试功能
    关于Http通信
    【原创】JMS生产者和消费者【PTP同步接收消息】
    【学习】JMS通信模式
    【原创】Unable to read TLD "META-INF/c.tld" from JAR file 解决方法
    【原创】websphere部署war包报错
    【转载】tom的RUNSTATS测试工具
  • 原文地址:https://www.cnblogs.com/LightyaChoo/p/13225670.html
Copyright © 2011-2022 走看看