【鸽笼原理】ZOJ 2955

原创 2012年03月30日 13:09:18

用到了鸽笼原理的结论:设可选的 N 个数从小到大依次为 a(1)、 a(2) … a(N),则在最优的取法中,小于 a(N) 的数不会多于 a(N) 个。

#define N 10005
int dp[N];
int w[111];
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n,c;
        scanf("%d%d",&n,&c);
        int i,j;
        for(i=1;i<=n;i++)scanf("%d",&w[i]);
        sort(w+1,w+1+n);
        int mx = w[n]*w[n];
        memset(dp,-1,sizeof(dp));
        dp[0] = 0;
        for(i=1;i<=n;i++){
            for(j=w[i];j<mx;j++){
                if(dp[j-w[i]]!=-1 && (dp[j]==-1 || dp[j-w[i]] + 1<dp[j]))
                dp[j] = dp[j-w[i]]+1;
            }
        }
        int res = c;
        int cnt = 0;
        if(c>=mx){
            res = c%mx;
            cnt = (c-c%mx)/w[n];
        }
        int ans;
        if(dp[res]==-1)ans=-1;
        else ans = cnt+dp[res];
        printf("%d\n",ans);
    }
    return 0;
}



















版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

鸽笼原理 小讲 【 理解 + 例题 】 更新 ing ...

桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,我们会发现至少会有一个抽屉里面至少放两个苹果。这一现象就是我们所说的“抽屉原理”。 抽屉原理的一般含义为:“如果每个抽屉代表一个集合,每一个苹...

Petrozavodsk Summer Training Camp 2016 I-Vier(鸽笼原理)

Problem I. Vier Input file: vier.in Output file: vier.out Time limit: 2 seconds Memory limit: 25...

Wunder Fund Round 2016 F. Double Knapsack(two pointers + 鸽笼原理)

题意: 给定2个N≤106元素的multiset,元素取值范围为1∼N给定2个N\le10^6元素的multiset, 元素取值范围为1\sim N 现在各从中选出一些元素的subset,s...
  • lwt36
  • lwt36
  • 2016-01-31 15:14
  • 661

POJ 3370 组合数学 鸽笼原理

参考:http://www.cppblog.com/pcfeng502/archive/2009/10/18/98902.aspx 这道题在集训手册上标志是“抽屉原理”,老实说,在看到这道题的具...

1100 - Again Array Queries (鸽笼定理)

1100 - Again Array Queries PDF (English) Statistics Forum Tim...

ZOJ 2836 Number Puzzle(容斥原理)

给出1到10的十个数字,要求输出不大于m的数字能被其中任意一个整除的数字有多少个 简单的熔池原理,我们用二进制枚举每个数字的选择情况,然后当选择的数字为奇数时将总数加上m/gcd   偶数时...

zoj 2836 Number Puzzle(容斥原理)

zoj 2836 Number Puzzle(容斥原理)

ZOJ 3233 Lucky Number(容斥原理)

Lucky Number Time Limit: 5 Seconds      Memory Limit: 32768 KB Watashi loves M mm very mu...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)