标签:
第一遍洗了个01背包,居然骗过了7个测试点。
后来才发现没我想的那么简单。
dp[i][j][k]为前i首放在前j张光盘上,占用了第j个光盘的k分钟所能装的歌的数量
/* ID: modengd1 PROG: rockers LANG: C++ */ #include <iostream> #include <stdio.h> #include <memory.h> using namespace std; int main() { freopen("rockers.in","r",stdin); freopen("rockers.out","w",stdout); int n,t,m; int i,j,k; int a[25]; int dp[25][25][25]= {0}; //f[i][j][k] 第i首歌装在第j个CD上 scanf("%d%d%d",&n,&t,&m); for(i=1; i<=n; i++) scanf("%d",&a[i]); for(i=1; i<=n; i++) for(j=1; j<=m; j++) for(k=0; k<=t; k++) { dp[i][j][k]=dp[i-1][j][k]; if(k>=a[i]) dp[i][j][k]=max(dp[i][j][k],dp[i-1][j][k-a[i]]+1); if(j>1&&t>=a[i]) dp[i][j][k]=max(dp[i][j][k],dp[i-1][j-1][t-a[i]]+1); } cout<<dp[n][m][t]<<endl; return 0; }
标签:
原文地址:http://www.cnblogs.com/modengdubai/p/4843607.html