Tsinsen A1123 邮票面值设计

来源:互联网 发布:golang syscall的用法 编辑:程序博客网 时间:2024/04/29 02:53

http://oj.tsinsen.com/A1123

分析:一顿瞎搜..凡是遇到搜索的老是想有没有别的办法,花了不少时间,这个题就是确定一个上界一通瞎搜就行了..

代码:

#include <cstdio>  #include <cstring>  #include <algorithm>  using namespace std;const int Inf = 1 << 20;int n, k, Max, dp[500];int TRes[500], Res[500];void Dfs(int d) {    int sup;    for (int i = 1; i < 500; ++i)        dp[i] = Inf;    dp[0] = 0;    for (sup = 1; sup <= 500; ++sup) {        for (int i = 1; i <= d && TRes[i] <= sup; ++i)            dp[sup] = min(dp[sup], dp[sup - TRes[i]] + 1);        if (dp[sup] > n) {            if (--sup > Max) {                Max = sup;                copy(TRes + 1, TRes + d + 1, Res + 1);            }            break;        }    }    if (d >= k) return;    for (int i = sup + 1; i > TRes[d]; --i) {        TRes[d + 1] = i;        Dfs(d + 1);    }}int main() {    scanf("%d%d", &n, &k);    TRes[1] = 1; Dfs(1);    for (int i = 1; i <= k; ++i)        printf("%d ", Res[i]);    printf("\nMAX=%d\n", Max);    return 0;}
0 0
原创粉丝点击