UVa12563 Jin Ge Jin Qu hao
2014-08-08 11:02
246 查看
知道它是0-1背包,还是跪了很多次。。先是写了不存在最优子结构的dp,后来又忽略了每首歌不能重复唱。dp(i,j)表示唱i首歌,剩余j分钟的情况下的最长时间。因为每首歌只能唱一次,把歌曲写在最外层循环,唱i首歌那层循环要倒过来写,否则会出现一首歌唱多次的情况。复杂度是O(n3)。
#include <iostream> #include <stdio.h> #include <cmath> #include <algorithm> #include <iomanip> #include <cstdlib> #include <string> #include <memory.h> #include <vector> #include <queue> #include <stack> #include <map> #include <set> #include <ctype.h> #define INF 1000000 #define ll long long #define min3(a,b,c) min(a,min(b,c)) using namespace std; int len[55]; int dp[55][9010]; int main(){ int T; cin>>T; for(int cas=1;cas<=T;cas++){ memset(dp,0,sizeof(dp)); int n,t; cin>>n>>t; for(int i=1;i<=n;i++){ cin>>len[i]; } sort(len+1,len+n+1); int cnt=0; int sum=0; for(int i=1;i<=n;i++){ sum+=len[i]; if(sum>t-1)break; cnt=i; } for(int i=1;i<=n;i++){ for(int j=cnt;j>0;j--){ for(int k=1;k<t;k++){ if((j==1||dp[j-1][k-len[i]])&&dp[j-1][k-len[i]]+len[i]<=k) dp[j][k]=max(dp[j][k],dp[j-1][k-len[i]]+len[i]); } } } printf("Case %d: %d %d\n",cas,cnt+1,dp[cnt][t-1]+678); } return 0; }
相关文章推荐
- UVa 12563 Jin Ge Jin Qu hao(DP 多种状态表示)
- UVA 12563 Jin Ge Jin Qu hao DP
- UVa 12563 Jin Ge Jin Qu hao(01背包)
- uva12563 Jin Ge Jin Qu hao
- UVA - 12563 Jin Ge Jin Qu hao
- UVA 12563 Jin Ge Jin Qu hao——01背包
- Jin Ge Jin Qu hao UVA - 12563
- UVa - 12563 - Jin Ge Jin Qu hao(01背包,动态规划)
- Jin Ge Jin Qu hao - UVa 12563 dp背包
- uva12563 Jin Ge Jin Qu hao
- Jin Ge Jin Qu hao UVA - 12563 (0-1背包变形)
- UVA 12563 Jin Ge Jin Qu hao
- UVa 12563 - Jin Ge Jin Qu hao(01背包)
- UVa12563- Jin Ge Jin Qu hao
- 动态规划入门 UVA12563 Jin Ge Jin Qu hao
- UVA12563 Jin Ge Jin Qu hao(DP, 背包+技巧)
- UVa 12563:Jin Ge Jin Qu hao(DP)
- UVA 12563 Jin Ge Jin Qu hao
- 【动态规划】[UVA12563]Jin Ge Jin Qu hao 劲歌金曲
- UVA - 12563 Jin Ge Jin Qu hao (01背包)