【bzoj1649】Cow Roller Coaster

傻逼dp题。

dp[i][j]表示用了i长度已花费成本j所能得到的价值。

然后枚举一下铁轨随便做了。

不行就sort一下。

#include<bits/stdc++.h>
#define inf 1000000007
typedef long long ll;
using namespace std;
struct Node{int s,c,w,f;}a[100010];
ll f[1005][1005];
bool cmp(Node a,Node b){
    if(a.s==b.s)return a.w<b.w;
    return a.s<b.s;
}
inline int read(){
    int f=1,x=0;char ch;
    do{ch=getchar();if(ch==‘-‘)f=-1;}while(ch<‘0‘||ch>‘9‘);
    do{x=x*10+ch-‘0‘;ch=getchar();}while(ch>=‘0‘&&ch<=‘9‘);
    return f*x;
}
int l,n,maxv;
int main(){
    l=read();n=read();maxv=read();
    for(int i=1;i<=n;i++){
        a[i].s=read();a[i].w=read();a[i].f=read();a[i].c=read();
    }
    sort(a+1,a+n+1,cmp);memset(f,-1,sizeof(f));f[0][0]=0;
    for(int i=1;i<=n;i++){
        int len=a[i].s+a[i].w;
        for(int j=maxv;j>=a[i].c;j--)if(f[a[i].s][j-a[i].c]>=0)
        f[len][j]=max(f[len][j],f[a[i].s][j-a[i].c]+a[i].f);
    }
    ll ans=-inf;
    for(int i=0;i<=maxv;i++)ans=max(ans,f[l][i]);
    cout<<ans;
}
时间: 2024-10-10 06:15:11

【bzoj1649】Cow Roller Coaster的相关文章

【题解】P2854 [USACO06DEC]牛的过山车Cow Roller Coaster

P2854 [USACO06DEC]牛的过山车Cow Roller Coaster 题目描述 The cows are building a roller coaster! They want your help to design as fun a roller coaster as possible, while keeping to the budget. The roller coaster will be built on a long linear stretch of land o

bzoj1649[Usaco2006 Dec]Cow Roller Coaster*

bzoj1649[Usaco2006 Dec]Cow Roller Coaster 题意: n条钢轨,第i条起点pi,长度为wi,价钱ci,有趣度fi,要求从0修到l使得总价钱不超过b的前提下有趣度和最大.n≤10000,l≤1000,b≤1000. 题解: 首先把钢轨组织成链表.接着dp:f[i][j]表示修到第i处花钱j,则f[i][j]=f[i-wk][j-ck]+fk,k为终点为i的钢轨.边界则设为f[0][j]都为0,f[i][j]都为负无穷,以保证从0开始修. 代码: 1 #incl

poj3257(Cow Roller Coaster)DP

迭代是一开发种技术,用来把系统功能传递到一系列的增量的完整版本,每个版本一个特定固定的时间段被开发,该时间段称之为迭代. 每个迭代的经历过程: 整个迭代过程: 图中颜色代表每次开发每项活动所占的比重不同 迭代式开发的优点: 1.降低风险 2.得到早期用户反馈 3.持续测试和集成 4.适应变更 开发特征: 1.在进行大规模的投资前,就解决了关键的风险问题 2.使的早期用户反馈在初始迭代中就能出现 3.连续进行测试和集成. 4.各个目标里程碑提供了短期的焦点. 5.对过程的测量是通过实现的评定来进行

BZOJ 1649: [Usaco2006 Dec]Cow Roller Coaster( dp )

有点类似背包 , 就是那样子搞... ------------------------------------------------------------------------------------ #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define rep( i , n ) for( int i = 0 ;  i < n ; ++i

【动态规划】bzoj1649 [Usaco2006 Dec]Cow Roller Coaster

很像背包. 这种在一个数轴上进行操作的题常常需要对区间排序. f[i][j]表示距离到i时,花费为j时的权值之和. f[x[i]+l[i]][j+c[i]]=max{f[x[i]][j]+w[i]}(1<=i<=n,0<=j<=B) #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct Line{int x,l,w,c;}a[10001

【题解】[Usaco2006 Dec]Cow Roller Coaster

01背包,难点在于多了一个维度(二维01背包) 有费用(成本这里称"奶牛币"),有价值(有趣指数这里称"fun值"),还有一个限制条件--轨道要求连续,切必须到达终点 既然有两个限制维度,那咱就开一个二维数组:F[i][j](为了避免与变量名重复,我这里使用大写F,代码里用小写f) F[i][j]表示:从轨道的起点某起点使用轨道,花费j奶牛币,到达该轨道的终点i,可以获得的最大的fun值 于是就有方程: F[x[i]+w[i]][j]=max(F[x[i]+w[i]

【BZOJ-4422】Cow Confinement 线段树 + 扫描线 + 差分 (优化DP)

4422: [Cerc2015]Cow Confinement Time Limit: 50 Sec  Memory Limit: 512 MBSubmit: 61  Solved: 26[Submit][Status][Discuss] Description 一个10^6行10^6列的网格图,上面有一些牛.花和一些矩形围栏,围栏在格子的边界上,牛和花在格子里,牛只能向下或向右走,牛也不能穿过围栏和地图边界,求每头牛它能到达的花的数量.注意栅栏不会相交 Input 第一行一个数f表示矩形围栏的

【POJ】Cow Multiplication(水题)

Cow Multiplication http://poj.org/problem?id=3673 题意:输入两个数A B,比如123和45   然后算123*45这个运算是指1*4 + 1*5 + 2*4 + 2*5 + 3*4 + 3*5 = 54. 思路:水题. #include<iostream> #include<cmath> #include<cstring> using namespace std; typedef long long ll; const

【poj3615】 Cow Hurdles

http://poj.org/problem?id=3615 (题目链接) 题意 给出一张有向图,求从u到v最大边最小的路径的最大边.→_→不会说话了.. Solution 好久没写Floyd了,水一发.邻接表都不用打... 代码 // poj3615 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #inclu