BNUOJ-29358 Come to a spring outing 搜索,DP

本文探讨了一种特定的背包问题,通过深度优先搜索(DFS)和动态规划(DP)两种方法解决物品分配到三个相同容量背包的问题,并确保所有物品能够被合理分配。文章提供了完整的C++代码实现。

  题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=29358

  状态虽然很多,但是非常稀疏,dfs搜索然后剪下枝。。

  或者DP,f[i][j][k]表示前 i 个物品能否到达第一个背包和第二个背包容量分别为 j 和 k 的状态,然后判断第3个背包是否能装下剩下的。f[i][j][k]=f[i-1][j][k] | f[i-1][j-v[i]][k] | f[i-1][j][k-v[i]]..

  搜索:

 1 //STATUS:C++_AC_10MS_1308KB
 2 #include <functional>
 3 #include <algorithm>
 4 #include <iostream>
 5 //#include <ext/rope>
 6 #include <fstream>
 7 #include <sstream>
 8 #include <iomanip>
 9 #include <numeric>
10 #include <cstring>
11 #include <cassert>
12 #include <cstdio>
13 #include <string>
14 #include <vector>
15 #include <bitset>
16 #include <queue>
17 #include <stack>
18 #include <cmath>
19 #include <ctime>
20 #include <list>
21 #include <set>
22 //#include <map>
23 using namespace std;
24 //#pragma comment(linker,"/STACK:102400000,102400000")
25 //using namespace __gnu_cxx;
26 //define
27 #define pii pair<int,int>
28 #define mem(a,b) memset(a,b,sizeof(a))
29 #define lson l,mid,rt<<1
30 #define rson mid+1,r,rt<<1|1
31 #define PI acos(-1.0)
32 //typedef
33 //typedef __int64 LL;
34 //typedef unsigned __int64 ULL;
35 //const
36 const int N=35;
37 const int INF=0x3f3f3f3f;
38 const int MOD=100000,STA=8000010;
39 //const LL LNF=1LL<<60;
40 const double EPS=1e-8;
41 const double OO=1e15;
42 const int dx[4]={-1,0,1,0};
43 const int dy[4]={0,1,0,-1};
44 const int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
45 //Daily Use ...
46 inline int sign(double x){return (x>EPS)-(x<-EPS);}
47 template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
48 template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
49 template<class T> inline T lcm(T a,T b,T d){return a/d*b;}
50 template<class T> inline T Min(T a,T b){return a<b?a:b;}
51 template<class T> inline T Max(T a,T b){return a>b?a:b;}
52 template<class T> inline T Min(T a,T b,T c){return min(min(a, b),c);}
53 template<class T> inline T Max(T a,T b,T c){return max(max(a, b),c);}
54 template<class T> inline T Min(T a,T b,T c,T d){return min(min(a, b),min(c,d));}
55 template<class T> inline T Max(T a,T b,T c,T d){return max(max(a, b),max(c,d));}
56 //End
57 
58 int v[N];
59 int T,n,m;
60 
61 int dfs(int d,int a,int b,int c)
62 {
63     if(d==n)return 1;
64     if(a>=v[d] && dfs(d+1,a-v[d],b,c))return 1;
65     if(b>=v[d] && dfs(d+1,a,b-v[d],c))return 1;
66     if(c>=v[d] && dfs(d+1,a,b,c-v[d]))return 1;
67     return 0;
68 }
69 
70 int main(){
71  //   freopen("in.txt","r",stdin);
72     int i,j,ca=1,ok,sum;
73     scanf("%d",&T);
74     while(T--)
75     {
76         scanf("%d%d",&n,&m);
77         sum=0;
78         for(i=0;i<n;i++){
79             scanf("%d",&v[i]);
80             sum+=v[i];
81         }
82         printf("Case %d: ",ca++);
83         if(m*m*m<sum){
84             printf("No\n");
85             continue;
86         }
87 
88         ok=dfs(0,m,m,m);
89 
90         printf("%s\n",ok?"Yes":"No");
91     }
92     return 0;
93 }

  

  DP:

 1 //STATUS:C++_AC_730MS_24308KB
 2 #include <functional>
 3 #include <algorithm>
 4 #include <iostream>
 5 //#include <ext/rope>
 6 #include <fstream>
 7 #include <sstream>
 8 #include <iomanip>
 9 #include <numeric>
10 #include <cstring>
11 #include <cassert>
12 #include <cstdio>
13 #include <string>
14 #include <vector>
15 #include <bitset>
16 #include <queue>
17 #include <stack>
18 #include <cmath>
19 #include <ctime>
20 #include <list>
21 #include <set>
22 //#include <map>
23 using namespace std;
24 //#pragma comment(linker,"/STACK:102400000,102400000")
25 //using namespace __gnu_cxx;
26 //define
27 #define pii pair<int,int>
28 #define mem(a,b) memset(a,b,sizeof(a))
29 #define lson l,mid,rt<<1
30 #define rson mid+1,r,rt<<1|1
31 #define PI acos(-1.0)
32 //typedef
33 typedef long long LL;
34 typedef unsigned long long ULL;
35 //const
36 const int N=35;
37 const int INF=0x3f3f3f3f;
38 const int MOD=100000,STA=8000010;
39 const LL LNF=1LL<<60;
40 const double EPS=1e-8;
41 const double OO=1e15;
42 const int dx[4]={-1,0,1,0};
43 const int dy[4]={0,1,0,-1};
44 const int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
45 //Daily Use ...
46 inline int sign(double x){return (x>EPS)-(x<-EPS);}
47 template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
48 template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
49 template<class T> inline T lcm(T a,T b,T d){return a/d*b;}
50 template<class T> inline T Min(T a,T b){return a<b?a:b;}
51 template<class T> inline T Max(T a,T b){return a>b?a:b;}
52 template<class T> inline T Min(T a,T b,T c){return min(min(a, b),c);}
53 template<class T> inline T Max(T a,T b,T c){return max(max(a, b),c);}
54 template<class T> inline T Min(T a,T b,T c,T d){return min(min(a, b),min(c,d));}
55 template<class T> inline T Max(T a,T b,T c,T d){return max(max(a, b),max(c,d));}
56 //End
57 
58 int f[N][410][410],v[N];
59 int T,n,m,sum;
60 
61 bool solve()
62 {
63     int i,j,k;
64     mem(f,0);
65     f[0][0][0]=1;
66     for(i=1;i<=n;i++){
67         for(j=0;j<=m;j++){
68             for(k=0;k<=m;k++){
69                 f[i][j][k]|=f[i-1][j][k];
70                 if(j>=v[i])f[i][j][k]|=f[i-1][j-v[i]][k];
71                 if(k>=v[i])f[i][j][k]|=f[i-1][j][k-v[i]];
72                 if(f[i][j][k] && sum-j-k<=m)return true;
73             }
74         }
75     }
76     return false;
77 }
78 
79 int main(){
80  //   freopen("in.txt","r",stdin);
81     int i,j,ca=1;
82     scanf("%d",&T);
83     while(T--)
84     {
85         scanf("%d%d",&n,&m);
86         sum=0;
87         for(i=1;i<=n;i++){
88             scanf("%d",&v[i]);
89             sum+=v[i];
90         }
91 
92         printf("Case %d: %s\n",ca++,solve()?"Yes":"No");
93     }
94     return 0;
95 }

 

转载于:https://www.cnblogs.com/zhsl/p/3282081.html

In today's world, technology has made shopping more convenient than ever before. With the click of a button, we can purchase anything we want from the comfort of our homes. However, traditional shopping at a mall or a store is still relevant, and many people still prefer it over online shopping. Both methods of shopping have their advantages and disadvantages, and this essay will explore them in detail. Firstly, buying things online is convenient. It saves time and effort. Online shopping allows us to purchase anything we want from the comfort of our homes or offices. We can browse through thousands of products from different stores without having to move from one place to another. All we need is a device connected to the internet, and we can shop for anything we want. Online shopping also provides us with a wider range of products to choose from. We can find products that we cannot find in physical stores. Online stores have a vast inventory of products, and they can accommodate a larger variety of products than physical stores. This means we can find unique and rare items that we cannot find in physical stores. Additionally, online shopping allows us to compare prices easily. We can compare the prices of the same product from different stores and choose the one that offers the best value for our money. Another advantage of buying things online is that we can shop at any time of the day or night. Online stores are open 24/7, so we can shop at our convenience. This is particularly useful for people who have busy schedules and cannot find the time to go to physical stores during their operating hours. Additionally, online shopping allows us to avoid crowds and long lines. We can shop without having to deal with the hassle of finding a parking spot, navigating through crowded aisles, and waiting in long checkout lines. However, buying things online also has its disadvantages. One of the biggest disadvantages is that we cannot see or touch the product before making a purchase. This means we have to rely on product descriptions and images provided by the seller. Sometimes, the product we receive may not be as described or may be of poor quality. In such cases, returning the product can be a hassle, and it may take a long time to receive a refund. Another disadvantage of online shopping is that we have to wait for the product to be delivered. The delivery time can vary, depending on the location of the seller and the buyer. Sometimes, the product may get delayed or lost during transit, which can be frustrating for the buyer. Moreover, some online sellers may charge exorbitant shipping fees, which can add to the cost of the product. On the other hand, buying things at a shopping mall has its own advantages. One of the biggest advantages is that we can see and touch the product before making a purchase. We can inspect the product closely and get a better idea of its quality. This is particularly important when buying clothing, shoes, or any other product that requires a proper fit. Additionally, physical stores provide us with immediate gratification. We can take the product home with us right away, without having to wait for it to be delivered. Another advantage of shopping at a mall is that we can enjoy the social aspect of shopping. We can go shopping with friends or family members and make it a fun outing. We can also get advice and recommendations from salespeople, who are trained to help us find the right product for our needs. This can be particularly useful when buying products that we are not familiar with, such as electronic gadgets or appliances. Moreover, shopping at a mall allows us to support local businesses. Many small businesses operate within malls, and shopping at these stores can help support the local economy. Additionally, shopping at a mall can be a form of exercise. Walking around the mall can be a good way to burn calories and stay active. However, shopping at a mall also has its disadvantages. One of the biggest disadvantages is that it can be time-consuming. We have to travel to the mall, find a parking spot, and navigate through crowded aisles. This can take up a lot of time, particularly during peak shopping seasons. Moreover, shopping at a mall can be stressful. Crowded stores, long lines, and pushy salespeople can make the shopping experience unpleasant. Another disadvantage of shopping at a mall is that we may not find the product we are looking for. Physical stores have a limited inventory, and they may not have the product we want in stock. This can be frustrating, particularly if we have traveled a long way to buy a specific product. In conclusion, both online shopping and shopping at a mall have their advantages and disadvantages. Online shopping is convenient and offers a wider range of products to choose from. However, it lacks the tactile experience of physical shopping and can be risky if the product does not meet our expectations. Shopping at a mall provides us with the social aspect of shopping, immediate gratification, and the opportunity to support local businesses. However, it can be time-consuming, stressful, and may not offer the product we are looking for. Ultimately, the choice between online shopping and shopping at a mall depends on personal preferences and needs.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值