SSLOJ1558&&P2760科技庄园

Description

Life是河北衡水中学的学生,他是一个道德极高的学生,他积极贯彻党的十七大精神,积极走可持续发展道路,在他的不屑努力下校领导终于决定让他在衡中的一片闲杂地里种桃,以亲身实践种田的乐趣,厉行节约,告诉人们节约的重要性!

春华秋实,在这个金秋的季节,Life带者他的宠物——PFT到了他的试验田,当他看见自己的辛勤成果时,心里是那个高兴啊!

这时Life对他的宠物PFT说:“你想不想吃桃啊?”

PFT兴奋的说:“好啊!”

Life说:“好吧,但是我只给你一定的时间,你必须在规定的时间之内回到我面前,否则你摘的桃都要归我吃!”

PFT思考了一会,最终答应了!

由于PFT的数学不好!它并不知道怎样才能在规定的时间获得最大的价值,但你是一个好心人,如果你帮助它,你的RP一定会暴涨的!

对于这个可以RP暴涨机会,你一定不会错过的是不是?

由于PFT不是机器人,所以他的体力并不是无限的,他不想摘很多的桃以至体力为0,而白白把桃给Life。同时PFT每次只能摘一棵桃树,摘桃花费时间体力,每棵桃树都可以摘K次(对于同一棵桃每次摘的桃数相同)。每次摘完后都要返回出发点(PFT一次拿不了很多)即Life的所在地(0,0){试验田左上角的桃坐标是(1,1)}。

PFT每秒只能移动一个单位,每移动一个单位耗费体力1(摘取不花费时间和体力,但只限上下左右移动)。

Input

第一行:四个数为N,M,TI,A 分别表示试验田的长和宽,Life给PFT的时间,和PFT的体力。

下面一个N行M列的矩阵桃田。表示每次每棵桃树上能摘的桃数。

接下来N行M列的矩阵,表示每棵桃最多可以采摘的次数K。

Output

一个数:PFT可以获得的最大的桃个数。

Sample Input

4 4 13 20
10 0 0 0
0 0 10 0
0 0 10 0
0 0 0 0
1 0 0 0
0 0 2 0
0 0 4 0
0 0 0 0
【样例解释】
可以摘到1次(1,1)和1次(2,3),体力和时间不满足再摘桃了。

Sample Output

10

思路

把每一个有桃子的地方看做K个体积为从(0,0)到(i,j)的距离,价值为桃子个数的物品,以时间和(体力-1)中更小的一个(记为t)为背包容量做多重背包
设b[i]为使用i个容量的背包最优价值
b [ i ] = m a x ( b [ i ] , b [ i − w [ j ] ] + v [ i ] ) ( 做 k [ i ] 次 ) ( 1 < = i < = 物 品 个 数 , t > = j > = w [ i ] ) b[i]=max(b[i],b[i-w[j]]+v[i])(做k[i]次)(1<=i<=物品个数,t>=j>=w[i]) b[i]=max(b[i],b[iw[j]]+v[i])(k[i])(1<=i<=,t>=j>=w[i])
code:

#include<iostream>
#include<algorithm>
using namespace std;
long long b[11111];
int v[11001],w[11001],o[111][111][2],c[11001],p=1;
int main()
{
 int n,m,t,t2;
 cin>>n>>m>>t>>t2;
 t=min(t,t2-1);
 for (int i=1;i<=n;i++)
 {
  for (int j=1;j<=m;j++)
  {
   cin>>o[i][j][0];
  }
 }
 for (int i=1;i<=n;i++)
 {
  for (int j=1;j<=m;j++)
  {
   cin>>o[i][j][1];
   if (o[i][j][1]==0) continue;
   w[p]=(i+j)*2;
   v[p]=o[i][j][0];
   c[p]=o[i][j][1];
   p++;
  }
 }
 for (int i=1;i<=p;i++)
 {
  for (int j=1;j<=c[i];j++) for (int k=t;k>=w[i];k--) b[k]=max(b[k],b[k-w[i]]+v[i]);
 }
 cout<<b[t];
 return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值