【洛谷 P2409】Y的积木(dp(01背包))
2016-10-31 17:52
302 查看
【题解】【01背包】
【考试的时候类比到两列数每列取一个求前k个最小值,然后,就按那个做了n-1次。然后,搞成一坨。。。】
【后来发现,其实只是一个dp。用f[i][j]表示加到第i行,此时总和为j的情况。然后逐层按01背包处理即可】
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int f[110][10010]; int a[110][110],m[110],n,k,sumx,summ; int main() { freopen("int.txt","r",stdin); freopen("my.txt","w",stdout); int i,j; memset(f,0,sizeof(f)); scanf("%d%d",&n,&k); for(i=1;i<=n;++i) { int maxn=0,minn=0x7fffffff; scanf("%d",&m[i]); for(j=1;j<=m[i];++j) { scanf("%d",&a[i][j]); if(a[i][j]>maxn) maxn=a[i][j]; if(a[i][j]<minn) minn=a[i][j]; } sumx+=maxn; } f[0][0]=1; for(i=1;i<=n;++i) for(j=1;j<=m[i];++j) for(int h=sumx;h>=a[i][j];h--) if(f[i-1][h-a[i][j]]) f[i][h]+=f[i-1][h-a[i][j]]; for(i=1;i<=sumx;++i) if(k) for(j=1;j<=f [i];++j) if(k) printf("%d ",i),k--; else return 0; else return 0; }
相关文章推荐
- 洛谷 P2409 小Y的积木 (dp)
- 洛谷P2409 Y的积木
- 洛谷 P2409 Y的积木
- 洛谷 P2409 Y的积木
- 动态规划入门 洛谷P2409 Y的积木
- 洛谷 P2409 Y的积木
- [DP][01背包]积木城堡
- 洛谷 p1004 方格取数 双线dp
- 【洛谷】P4643 【模板】动态dp
- 洛谷 P1021 邮票面值设计-简单搜索+dp
- hdu 2602 Bone Collector 01背包 dp
- DP:Cow Exhibition(POJ 2184)(二维问题转01背包)
- DP【洛谷P1704】 寻找最优美做题曲线
- 01背包__DP(POJ1745)
- 树形DP【洛谷P3047】 [USACO12FEB]附近的牛Nearby Cows
- [HDOJ5543]Pick The Sticks(DP,01背包)
- dp之01背包hdu3466(带限制的,当你所拥有的钱数大于某个限定值时才可以购买该物品)
- P1504 积木城堡(洛谷)
- 2017百度之星资格赛 1002-图 1003-DP 1004-01背包(解选择方案)
- 【DP】洛谷 P1508 Likecloud-吃、吃、吃