hdu_3127 WHUgirls

来源:互联网 发布:五五开笑笑知乎 编辑:程序博客网 时间:2024/06/07 21:40
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define N 1010struct node{    int x,y,val;}s[30];int dp[N][N];int main(){    int t,n,v1,v2;    scanf("%d",&t);    while(t--){        scanf("%d%d%d",&n,&v1,&v2);        for(int i=0;i<n;i++){            scanf("%d%d%d",&s[i].x,&s[i].y,&s[i].val);            s[i+n].x=s[i].y;            s[i+n].y=s[i].x;            s[i+n].val=s[i].val;        }        memset(dp,0,sizeof(dp));        for(int i=0;i<=v1;i++){            for(int j=0;j<=v2;j++){                for(int h=0;h<2*n;h++){                    int u=s[h].x;                    int v=s[h].y;                    if(u<=i&&v<=j)                        dp[i][j]=max(dp[i][j],max(dp[u][j-v]+dp[i-u][j],dp[i-u][v]+dp[i][j-v])+s[h].val);                }            }        }        printf("%d\n",dp[v1][v2]);    }    return 0;}
题意很明确,就是完全背包,刚开始对于n的循环写在外面。。一直wrong,还有个问题就是一刀切的方式应该有两种!


对于n这个循环为什么放里面:我刚开始写在外面,是根据二维背包的写法。。。其实这道题是三维的。。。。。


其实很好理解:两维才对应一个物品。。也就是说一个(x,y)才对应一个物品。。x,y是连在一起。。。。就是说选一个物品,x,y要同时改变。。
原创粉丝点击