博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj - 3039 Margaritas on the River Walk
阅读量:6293 次
发布时间:2019-06-22

本文共 1196 字,大约阅读时间需要 3 分钟。

稍微复杂一些的0、1背包,要把背包尽可能装满,直到再也装不下任何物品,求总装法。这题是不用考虑W的,先把V升序排序,从小到大枚举,当前物品为剩下未使用的物品中体积最小的,那么比当前小的一定是要使用的。这种思路是n^3的,后面的物品会被重复计算,如果从后往前枚举就能避免这个问题,复杂度为n^2。

1 #include 
2 #include
3 #include
4 using namespace std; 5 int dp[1005],sum[35],w[35]; 6 int main() 7 { 8 int T,m,n,v,i,j,k,ans; 9 scanf("%d",&T);10 for(m = 1; m <= T; m++)11 {12 scanf("%d%d",&n,&v);13 for(i = 1; i <= n; i++)14 scanf("%d",&w[i]);15 sort(w+1,w+1+n);16 if(w[1] > v)17 {18 printf("%d 0\n",m);19 continue;20 }21 ans = 0;22 sum[0] = 0;23 for(i = 1; i <= n; i++)24 sum[i] = sum[i-1] + w[i];25 memset(dp,0,sizeof dp);26 dp[0] = 1;27 for(i = n; i >= 1; i--)28 {29 k = max(0,v-sum[i]+1);30 for(j = v-sum[i-1]; j >= k; j--)31 if(dp[j]) ans += dp[j];32 for(j= v; j >= w[i]; j--)33 dp[j] += dp[j - w[i] ];34 }35 printf("%d %d\n",m,ans);36 }37 return 0;38 }

转载于:https://www.cnblogs.com/lzxskjo/archive/2012/08/29/2661182.html

你可能感兴趣的文章
还原数据库
查看>>
作业调度框架 Quartz.NET 2.0 beta 发布
查看>>
mysql性能的检查和调优方法
查看>>
项目管理中的导向性
查看>>
Android WebView 学习
查看>>
(转)从给定的文本中,查找其中最长的重复子字符串的问题
查看>>
HDU 2159
查看>>
spring batch中用到的表
查看>>
资源文件夹res/raw和assets的使用
查看>>
UINode扩展
查看>>
LINUX常用命令
查看>>
百度云盘demo
查看>>
概率论与数理统计习题
查看>>
初学structs2,简单配置
查看>>
Laravel5.0学习--01 入门
查看>>
时间戳解读
查看>>
sbin/hadoop-daemon.sh: line 165: /tmp/hadoop-hxsyl-journalnode.pid: Permission denied
查看>>
@RequestMapping 用法详解之地址映射
查看>>
254页PPT!这是一份写给NLP研究者的编程指南
查看>>
《Data Warehouse in Action》
查看>>