zoukankan      html  css  js  c++  java
  • 7 August

    P1021 邮票面值设计

    暴搜各面值。

    • 剪枝1:面值递增,新面值 (in[G_{i-1}+1, ncdot sum]). 为什么上界不是 (ncdot G_{i-1}+1) 呢?
    • 剪枝2:(G_1=1).

    dp 求面值最大值。

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    int n, k, f[5005], G[17], ans[17], MAX;
    
    int calc(int dep, int sum) {
    	memset(f, 0x3f, sizeof f);
    	f[0]=0;
    	for (int i=1; i<=dep; ++i) for (int j=G[i]; j<=sum*n; ++j)
    		f[j]=min(f[j], f[j-G[i]]+1);
    	for (int i=1; i<=sum*n; ++i) if (f[i]>n) return i-1;
    	return sum*n;
    }
    
    void dfs(int dep, int m, int sum) {
    	if (dep>k) {
    		if (MAX<m) {MAX=m; for (int i=1; i<=k; ++i) ans[i]=G[i]; }
    		return;
    	}
    	for (int i=G[dep-1]+1; i<=m+1; ++i) // *1
    		G[dep]=i, dfs(dep+1, calc(dep, sum+i), sum+i);
    }
    
    int main() {
    	scanf("%d%d", &n, &k);
    	G[1]=1, dfs(2, n, 1); // *2
    	for (int i=1; i<=k; ++i) printf("%d ", ans[i]);
    	printf("
    MAX=%d
    ", MAX);
    	return 0;
    }
    
  • 相关阅读:
    5.5,5.6
    5.1,5.2
    第四章.编程练习
    多源最短路径--flody算法
    Java 面试题
    python 打包exe程序
    sql优化
    二叉树
    todo: 队列、栈、散列集
    java注解
  • 原文地址:https://www.cnblogs.com/greyqz/p/11314484.html
Copyright © 2011-2022 走看看