ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

洛谷P1504 积木城堡

2019-08-18 23:02:26  阅读:251  来源: 互联网

标签:洛谷 积木 int P1504 long maxh 110 include dp


点击跳转了解题意

题解:背包方案总数问题,就对于每一个城堡,都跑一个01背包,看看哪些高度能搭成,最后从高到低枚举检验高度

若某个高度合法输出即可,注意代码实现,有的写法可能爆数组,有的写法可能爆longlong,可惜,我都试过了,血与泪啊。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<algorithm>
 5 
 6 using namespace std;
 7 
 8 int maxh,high[110];
 9 unsigned long long dp[110][10005];
10 int h[110][110];
11 int cnt[110];
12 int n;
13 
14 int main()
15 {
16     memset(dp,0,sizeof(dp));
17     scanf("%d",&n);
18     for(int i=1;i<=n;i++)
19     {
20         int x;
21         while(1)
22         {
23             scanf("%d",&x);
24             if(x==-1) break;
25             h[i][++cnt[i]]=x;
26             high[i]+=x;
27         }
28         maxh=max(maxh,high[i]);
29     } 
30     for(int i=1;i<=n;i++)
31     {
32         dp[i][0]=1;
33         for(int j=1;j<=cnt[i];j++)
34             for(int v=high[i];v>=h[i][j];v--)
35                 if(dp[i][v-h[i][j]]!=0) dp[i][v]=1;
36     }
37     for(int i=maxh;i>=0;i--)
38         for(int j=1;j<=n;j++)
39         {
40             if(dp[j][i]==0) break;
41             else if(j==n)
42             {
43                 printf("%d",i);
44                 return 0;
45             }
46         } 
47     return 0;
48 }

 

标签:洛谷,积木,int,P1504,long,maxh,110,include,dp
来源: https://www.cnblogs.com/Hoyoak/p/11374387.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有