ACM PKU 1157 LITTLE SHOP OF FLOWERS http://poj.org/problem?id=1157
明显的动态规划题,状态转移方程为:dp[i][j]=max{(dp[i-1][j-1]+A[i]),dp[i][j]};
下面附上我的代码:
#include <iostream>
#include <string.h>
#include <stdio.h>
const int inf=0x3fffffff;
const int maxn=101;
using namespace std;
int dp[maxn][maxn],num[maxn][maxn];
void solve(int bunches,int vases)
{
for(int i=0;i<vases;i++)
dp[0][i]=num[0][i];
for(int i=1;i<bunches;i++)
for(int j=0;j<vases;j++)
{
if(j<i) dp[i][j]=-inf;
else
{
int tmp=-inf;
for(int k=0;k<j;k++)
{
if(dp[i-1][k]+num[i][j]>tmp) tmp=dp[i-1][k]+num[i][j];
}
dp[i][j]=tmp;
}
}
int temp=-inf;
for(int i=0;i<vases;i++)
{
if(dp[bunches-1][i]>temp) temp=dp[bunches-1][i];
}
printf("%d\n",temp);
}
int main()
{
int bunches,vases;
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&bunches,&vases)==2)
{
for(int i=0;i<bunches;i++)
for(int j=0;j<vases;j++)
{
scanf("%d",&num[i][j]);
}
solve(bunches,vases);
}
return 0;
}
浙公网安备 33010602011771号