码迷,mamicode.com
首页 > 其他好文 > 详细

TYVJ1057

时间:2014-08-24 23:49:53      阅读:331      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   io   for   问题   div   代码   

这题我真的不想说什么了,真尼玛恶心,整整一个晚上,就让一个下标从0从1开始给整这了
这题本身确实不难,就是麻烦,交了8次,错了8次,本来以为是状态转移的时候出了问题,一直在那找,改了改又改,从对改到错,又从错改到更错,最后没办法又找的别人的代码。。算了,啥也不多说了。。
就是个01背包

DP时,对于附件直接跳过,主件分几次情况判断下就好,每个主件的决策太多了。。。
直接看代码吧。。

 

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 const int maxv = 32005;
 8 const int maxn = 70;
 9 
10 struct node
11 {
12     int v,w,q,cnt;
13     int s[2];
14 }a[maxn];
15 int dp[maxv];
16 int main()
17 {
18     //freopen("in.txt","r",stdin);
19     int n,m;
20     cin>>m>>n;
21     memset(a,0,sizeof(a));
22     for(int i = 1;i<=n;++i)
23     {
24         int x,y,z;
25         scanf("%d%d%d",&x,&y,&z);
26         if(z)
27         {
28 
29             a[i].w = x;
30             a[i].v = x*y;
31             a[i].q = z;
32             a[z].s[a[z].cnt] = i;
33             a[z].cnt++;
34         }
35         else
36         {
37             a[i].w = x;
38             a[i].v = x*y;
39             a[i].q = 0;
40         }
41     }
42     memset(dp,0,sizeof(dp));
43     for(int i = 1;i<=n;++i)
44     {
45         if(a[i].q)continue;
46         for(int j = m;j>=0;--j)
47             if(j>=a[i].w)
48             {
49                 dp[j] = max(dp[j],dp[j-a[i].w]+a[i].v);
50                 if(a[i].cnt>=1)
51                 {
52                     int x = a[i].s[0];
53                     if(j>=a[i].w+a[x].w)dp[j]=max(dp[j],dp[j-a[i].w-a[x].w]+a[i].v+a[x].v);
54                     if(a[i].cnt>=2)
55                     {
56                         int y = a[i].s[1];
57                         if(j>=a[i].w+a[y].w)dp[j]=max(dp[j],dp[j-a[i].w-a[y].w]+a[i].v+a[y].v);
58                         if(j>=a[i].w+a[x].w+a[y].w)
59                             dp[j]=max(dp[j],dp[j-a[i].w-a[x].w-a[y].w]+a[i].v+a[x].v+a[y].v);
60                     }
61                 }
62 
63             }
64     }
65     printf("%d\n",dp[m]);
66 
67     return 0;
68 }

 

TYVJ1057

标签:style   blog   color   os   io   for   问题   div   代码   

原文地址:http://www.cnblogs.com/GJKACAC/p/3933784.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!