您的位置:首页 > 其它

动态规划 xcoj 1150 校门外的树 LV.4

2016-05-22 22:43 351 查看


1150: 校门外的树 LV.4

时间限制: 1 Sec  内存限制: 64 MB
提交: 81  解决: 11

标签
提交统计讨论版


题目描述

据说校门外的树是校长从皇家布鲁斯特(Blue Shit)挖掘机学院搞来的珍贵品种,一共有n棵。在第一天,每棵树价值ai元。但是从第二天开始,每棵树的价值都会飙升bi元。GX于是想出了一个生财之道:砍树。他在蹲局子之前有m天可以砍树,每天最多砍一棵树。
那么问题就来了,GX在蹲局子之后,可以最多为自己累计多少存款以度过余生?


输入

输入数据第一行是数据组数T。
对于每组数据。包含三行。
第一行是n,m。(0<m<=n<=250)
第二行有n个整数,为每棵树的ai。(1<=ai<=100)
第三行有n个整数,为每棵树的bi。(1<=bi<=100)


输出

对于每组数据:
每行一个整数,为GX度过余生的最多存款。


样例输入

22 110 101 12 28 102 3


样例输出

1021


提示

 Author: 2013217098 潘 汀


来源

2014-2015学年第一次测试赛

很久以前写的dp- -也不知道咋写的

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef long double LD;
const double PI = acos(-1.0);
///////////////////////////////

struct node{
int a;
int b;
}st[300];

int cmp(struct node x,struct node y){
return x.b<y.b;
}

LL dp[300][300];

///////////////////////////////
int main(int argc, char**argv) {
//ios_base::sync_with_stdio(0);cin.tie(0);
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
////////////////////////////

int T;
cin>>T;
while(T--){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>st[i].a;
}
for(int i=1;i<=n;i++){
cin>>st[i].b;
}
sort(st+1,st+n+1,cmp);

memset(dp,0,sizeof(dp));

for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
dp[i][j]=max(dp[i-1][j],dp[i-1][j-1]+st[i].a+st[i].b*(j-1));
}
}

cout<<dp
[m]<<endl;

}

////////////////////////////
//system("pause");
return 0;

}
//END

/**************************************************************
Problem: 1150
User: 2015217298
Language: C++
Result: 正确
Time:108 ms
Memory:2212 kb
****************************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态规划 xcoj