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; }