codeforces 294B Shaass and Bookshelf (暴力dp)
2015-02-02 15:13
369 查看
题解:给出n本书,每本书有厚度t[i]和书的宽度w[i],每本书的高度相同。现在想要***一个书架,为了节省材料,尽量将书竖着放,剩下的书可以横着放在之前竖着的书的上面(当然宽度的那个面朝自己)。求书架的最小宽度。
题解:
这题有点想背包,暴力dp过之。我们可以先将书全部放在书架上然后挑出一些书放在上头。
那么状态dp[i][j][k]表示第i本书位置(这本书可以拿掉也可以不拿掉)书架的宽度为j,竖放的书上面可用的宽度为k时的状态是否存在。因此dp[i][j][k]只有两个值,1表示有这个状态,0表示没有那么碰到0就直接跳过。
PS:其实万物都可以用dp来做,只不过有些东西用dp大材小用或者不好写因此才衍生出贪心算法啊、图论算法等。如果能用暴力的情况又非常多容易漏,那么暴力dp完全可以取代之,dp调理清晰不容出错。
题解:
这题有点想背包,暴力dp过之。我们可以先将书全部放在书架上然后挑出一些书放在上头。
那么状态dp[i][j][k]表示第i本书位置(这本书可以拿掉也可以不拿掉)书架的宽度为j,竖放的书上面可用的宽度为k时的状态是否存在。因此dp[i][j][k]只有两个值,1表示有这个状态,0表示没有那么碰到0就直接跳过。
PS:其实万物都可以用dp来做,只不过有些东西用dp大材小用或者不好写因此才衍生出贪心算法啊、图论算法等。如果能用暴力的情况又非常多容易漏,那么暴力dp完全可以取代之,dp调理清晰不容出错。
#include<iostream> #include<math.h> #include<stdio.h> #include<algorithm> #include<string.h> #include<vector> #include<map> using namespace std; typedef long long lld; const int oo=0x3f3f3f3f; const lld OO=1e18; const int Mod=1000000007 ; const int maxn=100+5; int dp[maxn][2*maxn][2*maxn]; int w[maxn],t[maxn]; int main() { int n,T; while(scanf("%d",&n)!=EOF) { T=0; for(int i=1;i<=n;i++) scanf("%d %d",&t[i],&w[i]),T+=t[i]; int ans=oo; memset(dp,0,sizeof dp); dp[0][T][T]=1; for(int i=0;i<n;i++) { for(int j=T;j>=0;j--) { for(int k=j;k>=0;k--) { if(dp[i][j][k]) { dp[i+1][j][k]=1; if(k-t[i+1]-w[i+1]>=0) dp[i+1][j-t[i+1]][k-t[i+1]-w[i+1]]=1; } } } } for(int i=0;i<=n;i++) { for(int j=T;j>=0;j--) { for(int k=j;k>=0;k--) { if(dp[i][j][k]) ans=min(ans,j); } } } printf("%d\n",ans); } return 0; } /** */
相关文章推荐
- CodeForces 446A DZY Loves Sequences (DP+暴力)
- codeforces 385d bear and floodlight【状压DP之暴力枚举】
- CodeForces 754C Vladik and chat (DP+暴力)
- codeforces 650D D. Image Preview (暴力+二分+dp)
- Codeforces 354C Vasya and Beautiful Arrays[dp+暴力]
- Codeforces 354C. Vasya and Beautiful Arrays【DP,暴力】
- Codeforces 327A Flipping Game(区间DP,暴力枚举)
- CodeForces 22b_Bargaining Table_dp(暴力)
- CodeForces 22b_Bargaining Table_dp(暴力)
- Codeforces 891A Pride (dp & 数学 & 贪心 & 暴力)
- CodeForces - 22B Bargaining Table(暴力+dp)
- CodeForces 372b_Counting Rectangles is Fun_dp(暴力)
- (2017/4、8、/ B - Divide by Three) CodeForces - 792C (dp)(暴力破解)
- codeforces 167B Wizards and Huge Prize (概率dp,类似背包)
- codeforces 360B Levko and Array (dp神题)
- leetcode 327. Count of Range Sum 字段和问题 + 动态规划DP解决 + 字段数 + 暴力求解真好
- POJ 3311 Hie with the Pie (Floyd + 暴力全排列 || Floyd + 状态压缩DP (已补充))
- Codeforces 38H The Great Marathon [dp]
- Codeforces 360C Levko and Strings (dp)
- Codeforces 255C Almost Arithmetical Progression DP