hdu 3127 二维完全背包,长方形布料剪裁求最大价值

来源:互联网 发布:r语言lda函数源码 编辑:程序博客网 时间:2024/04/30 08:12
想法很直接有效
#include<iostream>#include<algorithm>#include<cstdio>#include<string.h>using namespace std;int dp[1100][1100];struct node{    int x,y;    int val;}Node[24];int max(int a,int b){    return a>b?a:b;}int main(){    int T;    int N,X,Y;    scanf("%d",&T);    while(T--)    {        memset(Node,0,sizeof(Node));        memset(dp,0,sizeof(dp));        scanf("%d%d%d",&N,&X,&Y);        for(int i=0; i<N; i++)        {            scanf("%d%d%d",&Node[i].x,&Node[i].y,&Node[i].val);        }        for(int i=1; i<=X; i++)            for(int j=1; j<=Y; j++)                for(int k=0; k<N; k++)                {                     if(i>=Node[k].x && j>=Node[k].y)                        dp[i][j]=max(dp[i][j],max((dp[i-Node[k].x][j]+dp[Node[k].x][j-Node[k].y]),(dp[i][j-Node[k].y]+dp[i-Node[k].x][Node[k].y]))+Node[k].val);                    int ii=j;                    int jj=i;                    if(jj>=Node[k].y && ii>=Node[k].x)                        dp[i][j]=max(dp[i][j],max((dp[i-Node[k].y][j]+dp[Node[k].y][j-Node[k].x]),(dp[i][j-Node[k].x]+dp[i-Node[k].y][Node[k].x]))+Node[k].val);                }            printf("%d\n",dp[X][Y]);    }    return 0;}

原创粉丝点击