笔直的水管 usaco 背包

背包dp入门,需要滚动数组;

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<string>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<iomanip>
 7 #include<cstdlib>
 8 using namespace std;
 9 const int maxn=101000;
10 const int inf=100000000;
11 int L,n;
12 int w[maxn],v[maxn],c[maxn];
13 void init(){
14     scanf("%d%d",&L,&n);
15     for(int i=1;i<=n;i++)scanf("%d%d",&w[i],&v[i]);
16 }
17 void work(){
18     memset(c,-10,sizeof(c));
19     c[0]=inf;
20     for(int i=1;i<=n;i++)
21         for(int j=L;j>=0;j--){
22             if(j<w[i])break;
23             c[j]=max(c[j],min(c[j-w[i]],v[i]));
24         }
25     cout<<c[L]<<endl;
26 }
27 int main(){
28     init();
29     work();
30 }

时间: 2024-10-29 00:12:18

笔直的水管 usaco 背包的相关文章

【USACO 3.1】Score Inflation(完全背包)

完全背包. http://train.usaco.org/usacoprob2?a=3Srffjlf4QI&S=inflate /* TASK:inflate LANG:C++ URL: */ #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #define ll long long #define N 10005 int m,n,w[N],p[

[USACO]奶牛会展(背包)

[USACO]奶牛会展 题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览.由于负的智商或情商会造成负面效果,所以贝西不希望出展奶牛的智商之和小于零,或情商之和小于零.满足这两个条件下,她希望出展奶牛的智商与情商之和越大越好,请帮助贝西求出这个最大值. 输入输出格式 输入格式: ? 第一行:单个整数N,1 ≤ N ≤ 400 ? 第二行到第N + 1 行:第i + 1 行有

USACO Money Systems Dp 01背包

一道经典的Dp..01背包 定义dp[i] 为需要构造的数字为i 的所有方法数 一开始的时候是这么想的 for(i = 1; i <= N; ++i){ for(j = 1; j <= V; ++j){ if(i - a[j] > 0){ dp[i] += dp[i - a[j]]; } } } 状态存在冗余, 输出的时候答案肯定不对 但只需要改一下两个for循环的顺序即可. Source Code: /* ID: wushuai2 PROG: money LANG: C++ */ //

USACO Subset 整数划分01背包

又是去理解了一次01背包. 这道题目的意思就是给你一个N (N < 40)表示有一个集合{1,2,3,... n} 你要将它划分成相等的两个子集合,求有几种划分方式 如果N是奇数,那么显然不能由相同的两个Sub Sum组成,所以要输出“0” 现在我们定义一个数组Dp[i][j] 表示前i个数组合起来的和是j的种数 接下来就和01背包很像了 得到状态转移方程Dp[i][j] = Dp[i - 1][j] + Dp[i - 1][j - i] 分表代表当前的i 取 和 不取 在每一层 j 的转移下要

USACO 2003 Fall Orange Cow Exhibition /// 负数01背包 oj22829

题目大意: 输入n 接下来n行 每行输入 a b 输出n行中 a+b总和最大的同时满足 所有a总和>=0所有b总和>=0的值 负数的01背包应该反过来 w[i]为正数时 需要从大往小推 即往0推 w[i]为负数时 同样应该往0推 即与正数反过来 #include <bits/stdc++.h> #define INF 0x3f3f3f3f using namespace std; int s[105],f[105],dp[1000*100*2+5]; int main() { in

usaco Shopping Offers(多重完全背包)

有个人要去超时买东西,超市推出了一些优惠信息,每个优惠信息可以使用多次,每条优惠信息限制了要使用这个优惠信息所需购买的物品种类和每种物品的数量. 求买下这个人想买得所有物品总共需要的最少花费. 分析之后以优惠券作为物品,以要买的物品总量为容量,花费的钱为价值. /* ID: modengd1 PROG: shopping LANG: C++ */ #include <iostream> #include <stdio.h> #include <memory.h> #in

poj 2184 Cow Exhibition(dp之01背包变形)

Description "Fat and docile, big and dumb, they look so stupid, they aren't much fun..." - Cows with Guns by Dana Lyons The cows want to prove to the public that they are both smart and fun. In order to do this, Bessie has organized an exhibitio

POJ2184---Cow Exhibition(01背包变形)

Description "Fat and docile, big and dumb, they look so stupid, they aren't much fun-" - Cows with Guns by Dana Lyons The cows want to prove to the public that they are both smart and fun. In order to do this, Bessie has organized an exhibition

USACO inflate

完全背包,转化为0/1背包 dp[i, j] = max(dp[i-1, j], dp[i, j - minutes[i]] + points[i]) /* ID:kevin_s1 PROG:inflate LANG:C++ */ #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <vector> #include <map