uva 473 dp

来源:互联网 发布:淘宝活动招商入口在哪 编辑:程序博客网 时间:2024/06/10 18:30

UVA 473 - Raucous Rockers

给出n首歌, m张磁盘,每张可以存t分钟歌曲。和每首歌的时间。歌曲必须按顺序存放。
以磁盘的存储情况为状态,

dp[i][j][k]表示前i首歌存在前j个磁盘并且第j个磁盘花了k分钟的最大存储歌曲数量。

第i-1首歌可能存在第j个磁盘或者第j-1个磁盘。得出转移

dp[i][j][k]=max{dp[i1][j][ka[i]]+1dp[i1][j1][t]+1

可压缩空间复杂度到(m*t)

#include <bits/stdc++.h>using namespace std;int n, t, m;int a[1005];int dp[1005][1005];int main () {    int T;    scanf ("%d", &T);    for (int cases=1; cases<=T; cases++) {        cin >> n >> t >> m;        for (int i=1; i<=n; i++) {            if (i == 1) scanf ("%d", &a[i]);            else scanf (", %d", &a[i]);        }        memset(dp, 0, sizeof(dp));        for (int i=1; i<=n; i++) {            for (int j=m; j>0; j--) {                for (int k=t; k>0; k--) {                    if (k>=a[i]) {                        dp[j][k] = max(dp[j][k], dp[j-1][t] + 1);                        dp[j][k] = max(dp[j][k], dp[j][k-a[i]] + 1);                    }                }            }        }        if (cases != 1) cout << endl;        cout << dp[m][t] << endl;    }    return 0;}
0 0
原创粉丝点击