nyoj106_背包问题(贪心or多重背包解法)
来源:互联网 发布:惠州综合网络问政平台 编辑:程序博客网 时间:2024/06/08 02:46
原题链接》》》
多重背包解法:
三种背包问题模板链接》》》
#include<stdio.h>#include<string.h>#define Nmax 11int v[Nmax];int w[Nmax];int dp[21];int m;void zobag(int v,int w){ for(int i=m;i>=w;i--) if(dp[i]<dp[i-w]+v) dp[i]=dp[i-w]+v;}void combag(int v,int w){ for(int i=w;i<=m;i++) if(dp[i]<dp[i-w]+v) dp[i]=dp[i-w]+v;}void multibag(int v,int w,int c){ if(c*w>m) combag(v,w); else{ int k=1; while(k<c){ zobag(v*k,w*k); c-=k; k*=2; } zobag(v*c,w*c); }}int main(){ int N,s,i,j; scanf("%d",&N); while(N--){ memset(dp,0,sizeof(dp)); scanf("%d%d",&s,&m); for(i=0;i<s;i++) scanf("%d%d",&v[i],&w[i]); for(i=0;i<s;i++) multibag(v[i],1,w[i]); printf("%d\n",dp[m]); } return 0;}
贪心的解法:
#include<stdio.h>#include<stdlib.h>struct In{ int v; int w;}dd[10];int cmp(const void*a,const void*b){ struct In*c=(In*)a; struct In*d=(In*)b; return d->v-c->v;}int main(){ int T,s,m,i; scanf("%d",&T); while(T--) { int pout=0; scanf("%d%d",&s,&m); for(i=0;i<s;i++) scanf("%d%d",&dd[i].v,&dd[i].w); qsort(dd,s,sizeof(dd[0]),cmp); i=0; while(1) { if(m<=dd[i].w){ pout+=m*dd[i].v; break; } else{ pout+=dd[i].w*dd[i].v; m-=dd[i].w; i++; } } printf("%d\n",pout); } return 0; }
0 0
- nyoj106_背包问题(贪心or多重背包解法)
- 多重背包问题(悲剧解法)
- 背包问题(01背包,完全背包,多重背包)
- 背包问题(01背包,完全背包,多重背包)
- 背包(01背包、完全背包、多重背包)问题总结
- 背包问题(01背包,完全背包,多重背包)
- 背包问题(01背包 + 完全背包 + 多重背包)
- 背包问题(01背包,完全背包,多重背包)
- 背包问题模板(01背包,完全背包,多重背包)
- 经典背包问题----(01背包、完全背包、多重背包)
- 背包问题3(多重背包)
- hdu2844 多重背包+二进制优化(多重背包的完全背包优化解法)
- 多重背包的一个解法
- 背包问题(栈解法)
- coins(hdu 3348 贪心 + 多重背包)
- 多重背包问题(三)
- hdu2191(多重背包问题)
- HDU2186(多重背包问题)
- Face Alignment at 3000 FPS通俗易懂讲解一 随机森林的生成
- HDU-畅通工程-1232
- Linux时间编程
- 深入浅出密码学---仿射加密
- android 当Activity中弹出对话框时,无法监听返回键
- nyoj106_背包问题(贪心or多重背包解法)
- 博为峰Java技术文章 ——JavaEE Hibernate实例状态
- 2017危中有机,中国股市和黄金大概率走牛
- 29.最小的K个数
- Web Service 浅谈-写的好清晰
- osg笔记三
- ThreadLocal详解
- jquery form表单.serialize()序列化后中文乱码问题原因及解决decodeURIComponent
- Linux的硬件时间及系统时间调用流程