正解:dfs+dp

解题报告:

传送门!

第一眼以为小凯的疑惑

ummm说实话没看标签我还真没想到正解:D

本来以为这么多年前的noip应该不会很难:D

看来还是太菜了鸭QAQ

然后听说题解都可以被6,6 or 7,8的数据卡掉?

不管不管先把题解的思路放下qwq

(话说其实我觉得虽然会被卡掉但其实还挺妙的了呢,,,至少我这种菜鸡想不出来,,,好傻逼啊我QAQ

大概说下,就是dfs+dp(,,,我好像说了句废话?QAQ

分别详细说下这俩趴qwq

dfs(i,mx):枚举到第i个数了,然后连续最大能表示数是mx

然后显然可以让邮票面值单调递增,且第i个不能大于mx+1(否则mx+1就无法表示了QAQ)

然后每次dp算下能表示的mx,继续dfs

dp(i):第1到第i个数的连续最大能表示数

开个f[i]存的是i最少可以用几张邮票表示

然后就可以了qwq

但是似乎复杂度是错的,,,

然后另外一个正解是打表,,,

umm,,,算了我放弃我估计我是搞不出来了的QAQ

不过研究了半天之后在讨论区看到说模拟退火可以过这题?

然而好像又说7 8的数据是不欧克的,也不知道是时间不欧克还是答案是WA的鸭QAQ

不管先先放下讨论区里大佬说的模拟退火的代码qwq

现在是先看不懂的QAQ就只是mk下不会研究,等学了之后再说QAQ

#include<iostream>
#include<cstring>
using namespace std;
][];//[num][used]
];
];
],maxnum;
;
,times=;//not best
bool rand(int mdf){
    +))%>rate);
}
int n,k;
int fcannot,lastcan;
int now;
int main(){
    cin>>n>>k;

    for(int _233=times;_233;_233--){
        memset(can,,sizeof(can));
        memset(cangen,,sizeof(cangen));
        can[][]=true;
        cangen[]=true;
        choose[]=;
        ;i<=n;i++){
            can[i][i]=true;
            cangen[i]=true;
        }
        fcannot=n+;
        lastcan=n;
        ;i<k;i++){
            ;j++){
                if(!cangen[j]){
                    fcannot=j;
                    break;
                }
            }
            now=fcannot;
            ;j<;j++){
                if(rand(j)){
                    >choose[i-]){
                        now-=;
                    }else{
                        break;
                    }
                }
            }
            choose[i]=now;
            ;i<=lastcan;i++){
                ;j<n;j++){
                    if(can[i][j]){
                        )continue;
                        can[i+now][j+]=true;
                        cangen[i+now]=true;
                        lastcan=max(lastcan,i+now);
                    }
                }
            }
        }
        ;j++){
            if(!cangen[j]){
                fcannot=j;
                break;
            }
        }
        fcannot--;
        if(fcannot>maxnum){
            ;i<;i++){
                bestsel[i]=choose[i];
            }
            maxnum=fcannot;
        }
    }
    ;i<k;i++){
        cout<<bestsel[i]<<" ";
    }
    cout<<endl;
    cout<<"MAX="<<maxnum;
}

QAQQQQQ

洛谷P1021邮票面值设计 [noip1999] dp+搜索的更多相关文章

  1. 洛谷P1021 邮票面值设计

    题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX之间的每一个邮资值都能得到 ...

  2. 洛谷 P1021 邮票面值设计

    题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX之间的每一个邮资值都能得到 ...

  3. 洛谷——P1021 邮票面值设计

    https://www.luogu.org/problem/show?pid=1021 题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都 ...

  4. 洛谷P1021邮票面值设计

    题目 一道很经典的搜索题,可以锻炼搜索的能力,比如可以用dfs覆盖加dp的方式来寻找+更新答案.而且还可以通过在递归中增加数组的方式来辅助搜索. #include <bits/stdc++.h& ...

  5. P1021 邮票面值设计(dfs+背包dp)

    P1021 邮票面值设计 题目传送门 题意: 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15N+K≤15)种邮票的情况下 (假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大 ...

  6. P1021 邮票面值设计

    P1021 邮票面值设计 题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX ...

  7. P1021 邮票面值设计——搜索+完全背包

    P1021 邮票面值设计 题目意思是你最多用n张邮票,你可以自己设定k种邮票的面值,每种邮票数量无穷,你最多能用这k种邮票在不超过n张的情况下,组合成的价值要求是从1开始连续的, 求最大能连续到多少: ...

  8. [NOIP1999提高] CODEVS 1047 邮票面值设计(dfs+dp)

    dfs出邮票的各种面值,然后dp求解. ------------------------------------------------------------------------------- ...

  9. 洛谷 P2725 邮票 Stamps Label:DP

    题目背景 给一组 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 题目描述 例如,假设有 1 分和 3 ...

随机推荐

  1. ios the request was denied by service delegate for reason unspecified

    报错的情况如下: xcode8(The request was denied by service delegate (SBMainWorkspace) for reason: Unspecified ...

  2. Unity应用架构设计(4)——设计可复用的SubView和SubViewModel(Part 2)

    在我们设计和开发应用程序时,经常要用到控件.比如开发一个客户端WinForm应用程序时,微软就为我们提供了若干控件,这些控件为我们提供了可被定制的属性和事件.属性可以更改它的外观,比如背景色,标题等, ...

  3. Effective Java 第三版——74. 文档化每个方法抛出的所有异常

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  4. Win2012R2 AD主域控登录密码忘记

    按照普遍的修改cmd.exe 的方法,还需要注意,DC主控制器修改密码需要在后面加上 /domain net user administrator 123 /domain

  5. Oracle分析函数-nulls first/nulls last

    select * from criss_sales; 通过rank().dense_rank().row_number()对记录进行全排列.分组排列取值但有时候,会遇到空值的情况,空值会影响得到的结果 ...

  6. HTTP缓存及其合理使用

    以前以为HTTP缓存是个简单的事,项目中遇到后才发觉关于缓存实践有挺深的学问. from几篇文章详见: 使用 HTTP 缓存:Etag, Last-Modified 与 Cache-Control 合 ...

  7. ABBYY PDF Transformer+安装教程

    ABBYY PDF Transformer+是一个新的全功能PDF文档工具,涵盖整个文档生命周期所涉及的各项功能,包括创建.讨论.批准.保护.转换成可编辑格式的PDF文件.文件合并.文本和图像的提取等 ...

  8. vscode切换界面布局

    调整vscode的控制面板位置 鼠标操作 view>Appearance>Toggle Panel Position   调整控制面板在界面底部 或者界面右侧 2.编辑区分布 鼠标操作 v ...

  9. Git忽略已经被版本控制的文件(添加.gitignore不会起作用)

    说明:已经被维护起来的文件(需要被远程仓库控制),即使加入.gitignore也会无济于事. .gitignore只对那些只存在在本地,而不在远程仓库的文件起作用.(untraked file). 操 ...

  10. Qt编写自定义控件6-指南针仪表盘

    前言 指南针仪表盘,主要用来指示东南西北四个方位,双向对称两个指针旋转,其实就是360度打转,功能属于简单型,可能指针的绘制稍微难一点,需要计算多个点构成多边形,本系列控件文章将会连续发100+篇,一 ...