CodeForces 632E Thief in a Shop(DP)
来源:互联网 发布:成都大旗软件 编辑:程序博客网 时间:2024/05/18 02:09
题意:给n个数,从中选k个(可以重复选)加起来,问最后有多少种不同的价值
思路:看起来很像一个多重背包,然而要准确的选到k个是不简单的,比如1 2 3 4 5,k=3,那么dp[6]=2,可是显然6也是可以由1,2,3来组成,所以直接多重背包会丢失解,解决方法是每个元素都减去a[1],令dp[i]为选了dp[i]个数价值为i,那么如果只用了k-2就凑成i,那么剩下的2个可以由a[1]来补上去,那么就恰好符合了题目要求的选k个数了。
#include<bits/stdc++.h>using namespace std;const int maxn = 1e3+5;int n,k,a[maxn],dp[maxn*maxn];int main(){ scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+1+n); n=unique(a+1,a+1+n)-(a+1); for(int i=2;i<=n;i++) a[i]=a[i]-a[1]; for(int i=1;i<=k*a[n];i++) dp[i]=k+1; for(int i=2;i<=n;i++) for(int j=a[i];j<=k*a[i];j++) dp[j]=min(dp[j],dp[j-a[i]]+1); for(int i=0;i<=k*a[n];i++) if(dp[i]<=k) printf("%d ",a[1]*k+i); return 0;}
0 0
- CodeForces 632E Thief in a Shop(DP)
- CodeForces 632E Thief in a Shop(FFT)
- CodeForces 632E Thief in a Shop(DP|完全背包)
- Codeforces 632E Thief in a Shop(FFT+快速幂)
- CF 632E Thief in a Shop
- codeforces_632E.Thief in a Shop(dp)
- Thief in a Shop CodeForces
- Educational Codeforces Round 9 E.Thief in a Shop
- Educational Codeforces Round 9 E. Thief in a Shop
- Educational Codeforces Round 9 E. Thief in a Shop(FFT)
- (Educational Codeforces Round 9)Thief in a Shop(dp)
- codeforces632E. Thief in a Shop (dp)
- Educational Codeforces Round 9 E.Thief in a Shop (FFT)★ ★
- Educational Codeforces Round 9 E. Thief in a Shop (FFT,计数)
- codeforces632e Thief in a Shop(完全背包)
- codeforces 479e Riding in a Lift | dp
- [笔记] Codeforces#274 Riding in a Lift (479E) DP
- Codeforces 479E Riding in a Lift(dp)
- [poj 3252] Round Numbers 组合数学
- 图文并茂用地址分析双向链表
- 第五周项目(1)-构造三角形类(5)
- 第5周项目1-三角形类雏形(3)
- 太乐了 哈哈哈
- CodeForces 632E Thief in a Shop(DP)
- fibnacci
- 3D touch
- Java实用篇--如何在指定文件位置创建文件
- Linux下启动java程序的通用脚本sh
- 2016.3.31 web页面乱码的问题
- iOS中delegate代理对象使用weak
- 高效技术领导的5个锦囊妙计
- 猜数字