POJ-3186-Treats for the Cows
2017-08-17 15:17
330 查看
题意:
有n个不同价值的东西要卖出,每天只能卖出一个东西,且每次只能卖最后一件或者第一件,东西卖出去的价格=储存天数*本身价值。问怎样卖才能获得最大收益。
思路:
一开始我以为只是简单的先卖两件中的便宜物品,其实这个想法是错的。正确的方法是dp,状态转移方程:dp[i][j]=max(dp[i-1][j]+(i+j)*a[i],dp[i][j-1]+(i+j)*a[n-j+1]);
i代表从前面卖了i个,j代表从后面卖了j个。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[2100][2100],a[2100];
int main(){
int n;
while(scanf("%d",&n)!=EOF){
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
dp[i][0]=dp[i-1][0]+a[i]*i;
for(int j=1;j<=n;j++)
dp[0][j]=dp[0][j-1]+a[n-j+1]*j;
for(int i=1;i<=n;i++)
for(int j=1;j+i<=n;j++){
//if((i+j)<=n)
dp[i][j]=max(dp[i-1][j]+(i+j)*a[i],dp[i][j-1]+(i+j)*a[n-j+1]);
}
int mx=0;
for(int i=1;i<=n;i++)
for(int j=1;j+i<=n;j++)
if((j+i)==n) mx=max(mx,dp[i][j]);
printf("%d\n",mx);
}
return 0;
}
有n个不同价值的东西要卖出,每天只能卖出一个东西,且每次只能卖最后一件或者第一件,东西卖出去的价格=储存天数*本身价值。问怎样卖才能获得最大收益。
思路:
一开始我以为只是简单的先卖两件中的便宜物品,其实这个想法是错的。正确的方法是dp,状态转移方程:dp[i][j]=max(dp[i-1][j]+(i+j)*a[i],dp[i][j-1]+(i+j)*a[n-j+1]);
i代表从前面卖了i个,j代表从后面卖了j个。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[2100][2100],a[2100];
int main(){
int n;
while(scanf("%d",&n)!=EOF){
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
dp[i][0]=dp[i-1][0]+a[i]*i;
for(int j=1;j<=n;j++)
dp[0][j]=dp[0][j-1]+a[n-j+1]*j;
for(int i=1;i<=n;i++)
for(int j=1;j+i<=n;j++){
//if((i+j)<=n)
dp[i][j]=max(dp[i-1][j]+(i+j)*a[i],dp[i][j-1]+(i+j)*a[n-j+1]);
}
int mx=0;
for(int i=1;i<=n;i++)
for(int j=1;j+i<=n;j++)
if((j+i)==n) mx=max(mx,dp[i][j]);
printf("%d\n",mx);
}
return 0;
}
相关文章推荐
- POJ 3186 Treats for the Cows 详解 (简单区间DP)
- POJ 3186 Treats for the Cows 递推
- POJ - 3186----Treats for the Cows
- poj 3186 Treats for the Cows(DP)
- POJ 3186 Treats for the Cows
- poj 3186 Treats for the Cows dp
- poj 3186 Treats for the Cows (区间dp)
- POJ 3186 Treats for the Cows
- POJ 3186 Treats for the Cows
- poj 3186 Treats for the Cows(区间dp)
- O - Treats for the Cows POJ - 3186【动态规划】
- POJ - 3186 Treats for the Cows
- POJ - 3186 Treats for the Cows(DP)
- POJ 3186 Treats for the Cows(区间dp)
- POJ 3186 Treats for the Cows (DP)
- POJ 3186 - Treats for the Cows
- POJ-3186 Treats for the Cows (区间DP)
- poj(3186)Treats for the Cows
- poj 3186 Treats for the Cows(区间dp)
- POJ 3186 Treats for the Cows(区间DP)