【动态规划】受受的刷题计划
2012-08-06 10:22
148 查看
1. 受受的刷题计划(plan.pas/c/cpp)
【问题描述】
MZOI的2013级有个人叫受受,他喜欢刷题,并且坚定地相信题刷得越多就越NB,可是呢,他还是经常性地报铃或者线下第一……为此,受受很是苦恼。
这个暑假是Noip2012前的最后一个暑假,大家都在为Noip2012奋斗,受受决定要改变以前盲目刷题的坏习惯,要有选择性地刷题。
于是呢,他就找来了N道题,并且提前为它们确定了各项系数:V表示受受做了这道题之后的收获,K表示受受做了这道题之后死掉的脑细胞,T表示受受做这道题所花费的时间。
由于时间有限,并且脑细胞有限,所以不可能把所有题都刷一遍,受受希望知道这个暑假他所能得到的最大收获总值。
【输入格式】
输入文件为plan.in,文件的第一行为三个整数:N、K、T,分别表示受受有N道题,总共有K个脑细胞,假期时间为T单位时间;接下来有N行,每行有三个整数:Vi,Ki,Ti,分别表示这道题的收获、需要的脑细胞以及需要的时间。可能有多组数据。
【输出格式】
输出文件为plan.out,对每组数据只有一行,表示受受的最大收获总值
【输入样例】
2 2 2
1 2 1
2 1 2
【输出样例】
2
【数据范围】
对于100%的数据,有0<N,T,K<=200
简单题,一开始弄错以为脑细胞和时间必须耗完,所以错了,改了就对了。
不过数据是错得。ZQZ发现的,因为大家都做错了,背包体积是可能为0的。
还有用就地滚动是可以的。
#include <cstdio>
#include <cstring>
#include <string>
#define MAX(a,b) ((a)>(b)?(a):(b))
long n,A,B;
long v[210];
long a[210];
long b[210];
long f[2][210][210];
long getint()
{
long rs=0;bool sgn=1;char tmp;
do tmp = getchar();
while (!isdigit(tmp)&&tmp-'-');
if (tmp=='-'){tmp=getchar();sgn=0;}
do rs=(rs<<3)+(rs<<1)+tmp-'0';
while (isdigit(tmp=getchar()));
return sgn?rs:-rs;
}
int main()
{
freopen("plan.in","r",stdin);
freopen("plan.out","w",stdout);
while (scanf("%ld%ld%ld",&n,&A,&B)==3)
{
for (long i=1;i<n+1;i++)
{
v[i] = getint();
a[i] = getint();
b[i] = getint();
}
for (long j=0;j<A+1;j++)
{
for (long k=0;k<B+1;k++)
{
f[0][j][k] = -0x7f7f7f7f;
}
}
f[0][0][0] = 0;
long ans = 0;
for (long i=1;i<n+1;i++)
{
for (long j=0;j<A+1;j++)
{
for (long k=0;k<B+1;k++)
{
f[i&1][j][k] = f[(i&1)^1][j][k];
if (j-a[i]>=0&&k-b[i]>=0)
{
f[i&1][j][k] = MAX(f[(i&1)^1][j][k],f[(i&1)^1][j-a[i]][k-b[i]]+v[i]);
}
}
}
}
for (long j=0;j<A+1;j++)
{
for (long k=0;k<B+1;k++)
{
ans = MAX(ans,f[n&1][j][k]);
}
}
printf("%ld\n",ans);
}
return 0;
}
【问题描述】
MZOI的2013级有个人叫受受,他喜欢刷题,并且坚定地相信题刷得越多就越NB,可是呢,他还是经常性地报铃或者线下第一……为此,受受很是苦恼。
这个暑假是Noip2012前的最后一个暑假,大家都在为Noip2012奋斗,受受决定要改变以前盲目刷题的坏习惯,要有选择性地刷题。
于是呢,他就找来了N道题,并且提前为它们确定了各项系数:V表示受受做了这道题之后的收获,K表示受受做了这道题之后死掉的脑细胞,T表示受受做这道题所花费的时间。
由于时间有限,并且脑细胞有限,所以不可能把所有题都刷一遍,受受希望知道这个暑假他所能得到的最大收获总值。
【输入格式】
输入文件为plan.in,文件的第一行为三个整数:N、K、T,分别表示受受有N道题,总共有K个脑细胞,假期时间为T单位时间;接下来有N行,每行有三个整数:Vi,Ki,Ti,分别表示这道题的收获、需要的脑细胞以及需要的时间。可能有多组数据。
【输出格式】
输出文件为plan.out,对每组数据只有一行,表示受受的最大收获总值
【输入样例】
2 2 2
1 2 1
2 1 2
【输出样例】
2
【数据范围】
对于100%的数据,有0<N,T,K<=200
简单题,一开始弄错以为脑细胞和时间必须耗完,所以错了,改了就对了。
不过数据是错得。ZQZ发现的,因为大家都做错了,背包体积是可能为0的。
还有用就地滚动是可以的。
#include <cstdio>
#include <cstring>
#include <string>
#define MAX(a,b) ((a)>(b)?(a):(b))
long n,A,B;
long v[210];
long a[210];
long b[210];
long f[2][210][210];
long getint()
{
long rs=0;bool sgn=1;char tmp;
do tmp = getchar();
while (!isdigit(tmp)&&tmp-'-');
if (tmp=='-'){tmp=getchar();sgn=0;}
do rs=(rs<<3)+(rs<<1)+tmp-'0';
while (isdigit(tmp=getchar()));
return sgn?rs:-rs;
}
int main()
{
freopen("plan.in","r",stdin);
freopen("plan.out","w",stdout);
while (scanf("%ld%ld%ld",&n,&A,&B)==3)
{
for (long i=1;i<n+1;i++)
{
v[i] = getint();
a[i] = getint();
b[i] = getint();
}
for (long j=0;j<A+1;j++)
{
for (long k=0;k<B+1;k++)
{
f[0][j][k] = -0x7f7f7f7f;
}
}
f[0][0][0] = 0;
long ans = 0;
for (long i=1;i<n+1;i++)
{
for (long j=0;j<A+1;j++)
{
for (long k=0;k<B+1;k++)
{
f[i&1][j][k] = f[(i&1)^1][j][k];
if (j-a[i]>=0&&k-b[i]>=0)
{
f[i&1][j][k] = MAX(f[(i&1)^1][j][k],f[(i&1)^1][j-a[i]][k-b[i]]+v[i]);
}
}
}
}
for (long j=0;j<A+1;j++)
{
for (long k=0;k<B+1;k++)
{
ans = MAX(ans,f[n&1][j][k]);
}
}
printf("%ld\n",ans);
}
return 0;
}
相关文章推荐
- 洛谷P1508 Likecloud-吃、吃、吃 [2017年4月计划 动态规划10]
- HDU 4502 吉哥系列故事——临时工计划(一维动态规划)
- HDOJ4502 吉哥系列故事——临时工计划(动态规划)&& 腾讯2013编程马拉松第0场第三题
- 洛谷P2347 砝码称重 [2017年4月计划 动态规划01]
- 洛谷P1968 美元汇率[2017年4月计划 动态规划02]
- 洛谷P2426 删数 [2017年4月计划 动态规划12]
- Vijos P1334 NASA的食物计划(动态规划,二维费用的01背包)
- hdu 4502 吉哥系列故事——临时工计划 (动态规划)
- BZOJ_1613_ [Usaco2007_Jan]_Running_贝茜的晨练计划_(动态规划)
- 【ACM训练计划】 HDU 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】
- [bzoj1613][Usaco2008 Jan]Running贝茜的晨练计划_动态规划
- 洛谷P1832 A+B Problem(再升级) [2017年4月计划 动态规划03]
- 洛谷P2196 挖地雷 [2017年4月计划 动态规划13]
- 洛谷P1474 [USACO 2.3]货币系统 Money Systems [2017年4月计划 动态规划04]
- 【ACM训练计划】 HDU 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】
- 【动态规划】贝茜的晨练计划
- 洛谷P1077 [NOIP2012普及组]摆花 [2017年四月计划 动态规划14]
- 【动态规划】贝茜的晨练计划 cowrun.pas/c/cpp
- 【动态规划】贝茜的晨练计划 cowrun.pas/c/cpp
- 【ACM训练计划】 HDU 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】