| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
求助:我用DP求出了,最大值,最小值,但是在判断每个数是取还是不取时没思路,非常感谢!!
#include <string.h>
#include <algorithm>
using namespace std;
const int SIZE=105;
double dp[SIZE][SIZE][5];
int dat[SIZE];
bool ans[SIZE][SIZE][5];
int main()
{
int i,j;
while (scanf ("%d %d",&n,&k)!=EOF)
{
for (i=1;i<=n;i++)
scanf ("%d",&dat[i]);
for (i=1;i<=n;i++)
dp[i][0][1]=dp[i][0][2]=1;
for (j=1;j<=k;j++)
dp[0][j][1]=dp[0][j][2]=1;
dp[0][0][1]=dp[0][0][2]=1;
for (i=1;i<=n;i++)
for (j=1;j<=k;j++)
{
ans[i][j][1]=ans[i][j][2]=true;
if (dat[i]>0)
{
dp[i][j][1]=dp[i-1][j-1][1]*dat[i];
dp[i][j][2]=dp[i-1][j-1][2]*dat[i];
}
else
{
dp[i][j][1]=dp[i-1][j-1][2]*dat[i];
dp[i][j][2]=dp[i-1][j-1][1]*dat[i];
}
if (i>j)
{if (dp[i][j][1]>dp[i-1][j][1])
{
ans[i][j][1]=false;
dp[i][j][1]=dp[i-1][j][1];
}
if (dp[i][j][2]<dp[i-1][j][2])
{
ans[i][j][2]=false;
dp[i][j][2]=dp[i-1][j][2];
}
}
}
printf("~~~%lf~~~\n",dp[n][k][2]);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator