【一堆的背包水题】沉迷于刷水无可救药~

我在干嘛,连普及组都不会考这种题。以三四分钟一道题的速度混了一下BZOJ的题目数量。

BZOJ1606: [Usaco2008 Dec]Hay For Sale 购买干草

裸的01背包。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int MAXN=5000+5;
 4 const int MAXC=50000+50;
 5  
 6 int main()
 7 {
 8     int c,h,v[MAXN],f[MAXC];
 9     scanf("%d%d",&c,&h);
10     memset(f,0,sizeof(f));
11     for (int i=1;i<=h;i++)
12     {
13         scanf("%d",&v[i]);
14         for (int j=c;j>=v[i];j--) f[j]=max(f[j],f[j-v[i]]+v[i]);
15     }
16     printf("%d",f[c]);
17     return 0;
18 } 

BZOJ1625: [Usaco2007 Dec]宝石手镯

裸的01背包again……注意一下里面的小注释……

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int MAXN=12880+5;
 4  
 5 int main()
 6 {
 7     int dp[MAXN],n,m;
 8     memset(dp,0,sizeof(dp));//如果需要恰巧装满,则dp[0]=0,dp[else]=-INF
 9     scanf("%d%d",&n,&m);
10     for (int i=1;i<=n;i++)
11     {
12         int w,d;
13         scanf("%d%d",&w,&d);
14         for (int j=m;j>=w;j--) dp[j]=max(dp[j],dp[j-w]+d);
15     }
16     printf("%d",dp[m]);
17     return 0;
18 } 

 

BZOJ1677: [Usaco2005 Jan]Sumsets 求和

裸的完全背包。以前写过一个递推版本的。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 using namespace std;
 7 const int MAXN=1000000+50;
 8 const int MOD=1e9;
 9  
10 int main()
11 {
12     int n;
13     scanf("%d",&n);
14     int k=1,dp[MAXN];
15     memset(dp,0,sizeof(dp));
16     dp[0]=1;
17     while (k<=n)
18     {
19         for (int v=k;v<=n;v++) dp[v]=(dp[v]+dp[v-k])%MOD;
20         k=k*2;
21     }
22     printf("%d",dp[n]%MOD);
23     return 0;
24 }

 

BZOJ1655: [Usaco2006 Jan] Dollar Dayz 奶牛商店

裸的完全背包,加了高精度。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 const int MAXN=1000+50;
 7 int f[MAXN][MAXN];
 8  
 9 void add(int a,int b)
10 {
11     int lena=f[a][0],lenb=f[b][0];
12     int len=max(lena,lenb);
13     int i,rem=0;
14     for (i=1;i<=len || rem;i++)
15     {
16         rem=(f[a][i]+f[b][i])/10;
17         f[a][i]+=f[b][i];
18         f[a][i]%=10;
19         f[a][i+1]+=rem;
20     }
21     f[a][0]=i-1;
22 }
23  
24 int main()
25 {
26     int n,k;
27     scanf("%d%d",&n,&k);
28     memset(f,0,sizeof(f));
29     f[0][0]=f[0][1]=1;
30     for (int i=1;i<=k;i++)
31         for (int j=i;j<=n;j++) add(j,j-i);
32     for (int i=f[n][0];i>=1;i--) printf("%d",f[n][i]);printf("\n");
33     return 0;
34 } 
35 

 

转载于:https://www.cnblogs.com/iiyiyi/p/6059451.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园失物招领系统管理系统按照操作主体分为管理员和用户。管理员的功能包括字典管理、论坛管理、公告信息管理、失物招领管理、失物认领管理、寻物启示管理、寻物认领管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 校园失物招领系统管理系统可以提高校园失物招领系统信息管理问的解决效率,优化校园失物招领系统信息处理流程,保证校园失物招领系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 ,管理员权限操作的功能包括管理公告,管理校园失物招领系统信息,包括失物招领管理,培训管理,寻物启事管理,薪资管理等,可以管理公告。 失物招领管理界面,管理员在失物招领管理界面中可以对界面中显示,可以对失物招领信息的失物招领状态进行查看,可以添加新的失物招领信息等。寻物启事管理界面,管理员在寻物启事管理界面中查看寻物启事种类信息,寻物启事描述信息,新增寻物启事信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
当涉及到背包时,贪心算法是一种常用的解决方法。在C语言中,可以使用贪心算法来解决背包。下面是一个简单的C语言贪心算法背包的代码示例: ```c #include <stdio.h> // 定义物品结构体 typedef struct { int weight; // 物品重量 int value; // 物品价值 } Item; // 贪心算法背包函数 void knapsack(Item items[], int n, int capacity) { // 计算物品的性价比(价值除以重量) float ratios[n]; for (int i = 0; i < n; i++) { ratios[i] = (float) items[i].value / items[i].weight; } // 按照性价比排序物品 for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (ratios[j] < ratios[j + 1]) { // 交换物品的位置 float tempRatio = ratios[j]; ratios[j] = ratios[j + 1]; ratios[j + 1] = tempRatio; Item tempItem = items[j]; items[j] = items[j + 1]; items[j + 1] = tempItem; } } } // 装入背包 int currentWeight = 0; float totalValue = 0; for (int i = 0; i < n; i++) { if (currentWeight + items[i].weight <= capacity) { // 将物品放入背包 currentWeight += items[i].weight; totalValue += items[i].value; } else { // 物品只能部分放入背包 int remainingWeight = capacity - currentWeight; totalValue += ratios[i] * remainingWeight; break; } } // 输出结果 printf("背包中物品的总价值为: %.2f\n", totalValue); } int main() { // 创建物品数组 Item items[] = { {10, 60}, {20, 100}, {30, 120} }; int n = sizeof(items) / sizeof(items[0]); // 物品数量 int capacity = 50; // 背包容量 // 调用贪心算法背包函数 knapsack(items, n, capacity); return ; } ``` 这段代码实现了一个简单的贪算法背包。它首先计算每个物品性价比,然后按照性价比对物品进行排序。接下来,它从性价比最高的物品开始,依次将物品放入背包,直到背包装满或者所有物品都放入背包。最后,输出背包中物品的总价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值