zoukankan      html  css  js  c++  java
  • 观光浏览

    一条街道被分成m格(1<=m<=100),还有n个景点(1<=n<=100),分布在街道上。每个景点可以占据连续的若干格,并且有一个美学值v(0<v<=100)。现要组织k个人考察这个街道(1<=k<=m),每个人考察的区域是连续的若干格(不可为0格),且任意两个人考察的区域不得相交,也不得有一个格子无人考察。对于任意一个人,如果它考察的区域中有一个风景点(风景点必须完整的位于这个区域),则它就得到了这个风景点的分值(美学值)。

    你的任务是将街道的m个格子分给k个人去考察,使得总的分值最大。

    【输入文件】

    第一行一个整数m,表示街道的长度。

    第二行一个整数n,表示风景点个数。

    此后n行,每行描述一个风景点,三个整数x、y和v,表示该风景点是从第x个格子到第y个格子,美学值为v。

    最后一行一个整数k,表示考察的人数。

    【输出文件】

    一个整数,表示最大可以得到的分值。

    【输入输出样例】

    输入:

    3
    2
    1 2 2
    2 3 3
    2

    输出:
    3

    【参考程序】:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int f[101][101],c[101][101];
    int n,m,k;
    int main()
    {
            freopen("view.in","r",stdin);
            freopen("view.out","w",stdout);
            scanf("%d",&n);scanf("%d",&m);
            memset(c,0,sizeof(c));
            int x,y,v;
            for (int t=1;t<=m;t++)
            {
                    scanf("%d%d%d",&x,&y,&v);
                    for (int i=1;i<=x;i++)
                            for (int j=y;j<=n;j++)
                                    c[i][j]+=v;
            }
            scanf("%d",&k);
            memset(f,128,sizeof(f));
            f[0][0]=0;
            for (int i=1;i<=n;i++)
                    for (int j=1;j<=k;j++)
                            for (int l=0;l<=i-1;l++)
                                    if (f[i][j]<f[l][j-1]+c[l+1][i])
                                            f[i][j]=f[l][j-1]+c[l+1][i];
            printf("%d ",f[n][k]);
            return 0;
    }
  • 相关阅读:
    core.net 创建coreclass 项目出现一些问题
    【BZOJ4144】[AMPPZ2014]Petrol 最短路+离线+最小生成树
    【BZOJ4774/4006】修路/[JLOI2015]管道连接 斯坦纳树
    【BZOJ2595】[Wc2008]游览计划 斯坦纳树
    【BZOJ4149】[AMPPZ2014]Global Warming 单调栈+RMQ+二分
    【BZOJ4764】弹飞大爷 LCT
    【BZOJ3529】[Sdoi2014]数表 莫比乌斯反演+树状数组
    【BZOJ5008】方师傅的房子 三角剖分
    【BZOJ4282】慎二的随机数列 乱搞
    【BZOJ1568】[JSOI2008]Blue Mary开公司 线段树
  • 原文地址:https://www.cnblogs.com/weiliuyby/p/5813609.html
Copyright © 2011-2022 走看看