您的位置:首页 > 其它

poj 1874 Trade on Verweggistan

2012-04-10 14:36 381 查看
题目链接:http://poj.org/problem?id=1874

题目思路:简单题,不过题意好难理解啊!

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<queue>
#include<algorithm>
#include<vector>
#include<stack>
#include<list>
#include<iostream>
#include<map>
using namespace std;
#define inf 0x3f3f3f3f
#define Max 110
int max(int a,int b)
{
return a>b?a:b;
}
int min(int a,int b)
{
return a<b?a:b;
}
int money,num,w,cnt;
int sum,MAXN,dp[55][1010],p;
int ans[55];
int main()
{
int i,j,k,count=1;
while(scanf("%d",&w),w)
{
money=0;
memset(dp[0],0,sizeof(dp[0]));
dp[0][0]=1;
for(i=1;i<=w;i++)
{
memset(dp[i],0,sizeof(dp[i]));
sum=0;
MAXN=0;
cnt=0;
scanf("%d",&num);
ans[cnt++]=0;
for(j=1;j<=num;j++)
{
scanf("%d",&p);
p=10-p;
sum+=p;
//  printf("sum%d\n",sum);
if(sum>MAXN)
{
cnt=0;
ans[cnt++]=j;
MAXN=sum;
}
else if(sum==MAXN)
{
ans[cnt++]=j;
}
//    printf("MAX %d\n",MAXN);
}
money+=MAXN;
for(j=0;j<cnt;j++)
for(k=1000;k>=0&&k-ans[j]>=0;k--)
{
if(dp[i-1][k-ans[j]])
dp[i][k]=1;
}
}
num=1;
printf("Workyards %d\nMaximum profit is %d.\n",count++,money);
printf("Number of pruls to buy:");
for(i=0;i<=1000;i++)
{
if(dp[w][i]&&num<=10)
{
num++;
printf(" %d",i);
}
}
puts("");
puts("");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: