TOJ 3290
2014-02-26 09:09
369 查看
题目标题:
Watch The Movie
题目连接:
http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3290
题目类型:
动态规划 - 多维背包
数据结构:
struct LMIC_MOVIE
{
int t, v;
};
// 时间, 个数
int dp[1005][1005];
思路分析:
背包问题,
限制条件有2个.
一个是时间L,每一部电影都有其时间, 总和不能超过L
一个是数量M,每一部电影相当于数量1的物品,总和不能超过M
利用单纯01背包多加一维的方法
便可以实现多维背包
证明:
略
源代码:
#include <stdio.h>
#include <iostream>
#include <fstream>
using namespace std;
struct LMIC_MOVIE
{
int t, v;
};
// 时间, 个数
int dp[1005][1005];
int main()
{
int i, j, k, t, n, m, l;
LMIC_MOVIE mie[105];
scanf( "%d", &t );
while( t -- )
{
scanf( "%d%d%d", &n, &m, &l );
for (i = 0; i <= l; i ++ )
{
for (j = 0; j <= m; j ++ )
{
if( j )
{
dp[i][j] = -999999;
}
else
{
dp[i][j] = 0;
}
}
}
for( i = 1; i <= n; i ++ )
{
scanf( "%d%d", &mie[i].t, &mie[i].v );
}
for( i = 1; i <= n; i ++ )
{
for( j = l; j >= mie[i].t; j -- )
{
for( k = m; k >= 1; k -- )
{
if( dp[j][k] < dp[j - mie[i].t][k - 1] + mie[i].v )
{
dp[j][k] = dp[j - mie[i].t][k - 1] + mie[i].v;
}
}
}
}
printf( "%d\n", dp[l][m] >= 0 ? dp[l][m] : 0 );
}
return 0;
}
Watch The Movie
题目连接:
http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3290
题目类型:
动态规划 - 多维背包
数据结构:
struct LMIC_MOVIE
{
int t, v;
};
// 时间, 个数
int dp[1005][1005];
思路分析:
背包问题,
限制条件有2个.
一个是时间L,每一部电影都有其时间, 总和不能超过L
一个是数量M,每一部电影相当于数量1的物品,总和不能超过M
利用单纯01背包多加一维的方法
便可以实现多维背包
证明:
略
源代码:
#include <stdio.h>
#include <iostream>
#include <fstream>
using namespace std;
struct LMIC_MOVIE
{
int t, v;
};
// 时间, 个数
int dp[1005][1005];
int main()
{
int i, j, k, t, n, m, l;
LMIC_MOVIE mie[105];
scanf( "%d", &t );
while( t -- )
{
scanf( "%d%d%d", &n, &m, &l );
for (i = 0; i <= l; i ++ )
{
for (j = 0; j <= m; j ++ )
{
if( j )
{
dp[i][j] = -999999;
}
else
{
dp[i][j] = 0;
}
}
}
for( i = 1; i <= n; i ++ )
{
scanf( "%d%d", &mie[i].t, &mie[i].v );
}
for( i = 1; i <= n; i ++ )
{
for( j = l; j >= mie[i].t; j -- )
{
for( k = m; k >= 1; k -- )
{
if( dp[j][k] < dp[j - mie[i].t][k - 1] + mie[i].v )
{
dp[j][k] = dp[j - mie[i].t][k - 1] + mie[i].v;
}
}
}
}
printf( "%d\n", dp[l][m] >= 0 ? dp[l][m] : 0 );
}
return 0;
}
相关文章推荐
- TOJ1072 输出为本身的C程序
- TOJ 1868. Count the factors
- toj 1721 Friends
- TOJ 2118 Optimal Array Multiplication Sequence 矩阵连乘 我会做DP了!
- TOJ 3428. Fibonacci(Fibonacci数列的一个很好玩的规律)
- [TOJ] 1079 Octal Fractions -- JAVA高精
- TOJ 1115 POJ 1328 Radar Installation 贪心 C/C++
- TOJ 3072
- TOJ 10007 The last non-zero digit of n!
- TOJ 1752 POJ 2255 Tree Recovery
- TOJ 3053 OJ 2244 ZOJ 1088 System Overload / 约瑟夫
- toj1144 Tree Recovery
- TOJ 4325 RMQ with Shifts / 线段树单点更新
- TOJ 4369 ZOJ 3632 Watermelon Full of Water / 线段树优化DP
- TOJ 3250
- TOJ 1836 Play on Words
- TOJ 2861 Octal Fractions
- TOJ 3635 过山车
- TOJ 1883 ZOJ 1298 POJ 1135 Domino Effect / Dijkstra
- TOJ 4289 Unrequited Love