zoukankan      html  css  js  c++  java
  • 贪心构造——81.D. Polycarp's Picture Gallery

    如何安排相片,使相片尽量能放入几个给定的箱子里(体积不同),但是条件是,每个箱子里的照片不能相邻:如第一张,第二张不能同时放到一个箱子里,而且第一张与最后一张也不能在一起!!!错了N久,解决方法就是尽量把不能最后放的箱子在前面用掉
    1.按每个箱子剩余容积排序
    放入第一张到一个箱子里
    2.每放入一张照片前,先拿第一张所放入的箱子号去放(为了使第一张与最后一张不能相邻),如不行则再按每个箱子剩余容积排序,选择符合的箱子去放
    View Code
    #include<iostream>
    #include
    <cstdio>
    #include
    <algorithm>
    using namespace std;

    struct data
    {
    int v;
    int no;
    int top;
    }qun[
    49];

    int ji[49];
    int q[1009];

    int cmp(data a,data b)
    {
    if(a.v==b.v)
    return a.no<b.no;
    return a.v>b.v;
    }


    int main()
    {
    int n,m;
    scanf(
    "%d%d",&n,&m);

    int i,j;
    for(i=0;i<m;i++)
    {
    scanf(
    "%d",&qun[i].v);
    qun[i].no
    =i;
    qun[i].top
    =-1;
    }



    int add=0;
    sort(
    &qun[0],&qun[m],cmp);
    qun[
    0].v--;
    qun[
    0].top=0;
    q[add]
    =qun[0].no;
    add
    ++;

    bool xia=0;
    for(i=1;i<n;i++)
    {
    bool su=0;
    sort(
    &qun[0],&qun[m],cmp);

    if(i+1!=n)//不是最后一个的情况下,先把与第一个号码一样的送出去,防止首位相邻
    for(j=0;j<m;j++)
    {
    if(qun[j].no==q[0])
    {
    if((i-qun[j].top)!=1&&qun[j].v>=1)
    {
    qun[j].v
    --;
    qun[j].top
    =i;
    q[add]
    =qun[j].no;
    add
    ++;
    su
    =1;

    }
    break;
    }
    }

    if(su==0)
    for(j=0;j<m;j++)
    {
    if(i+1==n&&qun[j].no==q[0])//qun[0]因为排序过所以会变的qun[j].no==q[0]时头尾相邻了,舍去
    continue;

    if((i-qun[j].top)!=1&&qun[j].v>=1)
    {
    qun[j].v
    --;
    qun[j].top
    =i;
    q[add]
    =qun[j].no;
    add
    ++;
    su
    =1;
    break;
    }
    }
    if(su==0)
    {
    printf(
    "-1\n");
    return 0;
    }
    }


    for(i=0;i<add;i++)
    {
    printf(
    "%d ",q[i]+1);
    }
    printf(
    "\n");
    return 0;
    }
    如:6 3
    1 2 3 
    输出:
    3 2 3 1 2 3 就错
    而是:3 2 3 2 3 1
  • 相关阅读:
    linux的redis的安装和使用
    在linux上安装Mysql和使用
    linux的python3的安装
    linux的优化和命令
    LeetCode 542. 01 Matrix
    Qt keyPressEvent
    QOpenGLTexture 两个纹理叠加
    Qt5.6.0+OpenGL 纹理贴图首战告捷
    更改Qt Application为 Qt Console Application
    Learning part-based templates from large collections of 3D shapse CorrsTmplt Kim 代码调试
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2037771.html
Copyright © 2011-2022 走看看