动态规划 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
****************************************************************/
相关文章推荐
- C++动态规划之最长公子序列实例
- C++动态规划之背包问题解决方法
- C#使用动态规划解决0-1背包问题实例分析
- 动态规划
- C++ 动态规划
- DP(动态规划) 解游轮费用问题
- 动态规划的用法——01背包问题
- 动态规划的用法——01背包问题
- 《收集苹果》 动态规划入门
- 《DNA比对》蓝桥杯复赛试题
- 《背包问题》 动态规划
- 自顶向下动态规划解决最长公共子序列(LCS)问题
- 初学ACM - 半数集(Half Set)问题 NOJ 1010 / FOJ 1207
- 关于爬楼梯的动态规划算法
- 动态规划 --- hdu 1003 **
- DP问题各种模型的状态转移方程
- 0-1背包解题过程
- 背包问题
- USACO 3.2.2:Stringsobits
- 字符串编辑距离