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;
    }
    
  • 相关阅读:
    codeforces 980A Links and Pearls
    zoj 3640 Help Me Escape
    sgu 495 Kids and Prizes
    poj 3071 Football
    hdu 3853 LOOPS
    hdu 4035 Maze
    hdu 4405 Aeroplane chess
    poj 2096 Collecting Bugs
    scu 4444 Travel
    zoj 3870 Team Formation
  • 原文地址:https://www.cnblogs.com/greyqz/p/11314484.html
Copyright © 2011-2022 走看看