zoukankan      html  css  js  c++  java
  • jzojs 100044. 【NOIP2017提高A组模拟7.13】abcd

    哈哈,看这题挺少题解的,就发一份吧

    Description
    在这里插入图片描述

    Input
    输入文件名为abcd.in
    输入文件共 N+1 行。
    第 1 行包含1个正整数N。
    第 i+1 行包含4个整数a[i],b[i],c[i],d[i]。

    Output
    输出文件名为abcd.out。
    输出共1行,包含1个整数,表示所给出公式的最大值。
    输入数据保证一定有解。

    Sample Input
    Sample1:
    5
    -1 1 2 5
    -2 2 1 2
    0 1 1 3
    -2 -1 3 10
    -2 2 3 9
    Sample2:
    10
    1 10 1 7
    -10 10 2 0
    -10 10 2 2
    -10 10 2 0
    1 10 1 0
    -10 10 2 0
    10 10 2 0
    1 10 1 0
    -10 10 2 0
    1 10 1 0
    Sample3:
    10
    1 10 1 0
    -10 10 2 2
    -10 10 2 2
    -10 10 2 2
    1 10 1 0
    -10 10 2 2
    -10 10 2 2
    1 10 1 0
    -10 10 2 2
    1 10 1 0

    Sample Output
    Sample1:
    2
    Sample2:
    90
    Sample3:
    -4

    Data Constraint
    对于20%的数据,N≤10,-2≤a[i]<b[i]≤2;
    对于60%的数据,N≤50, -20≤a[i]<b[i]≤20;
    对于100%的数据,
    N≤200,-25≤a[i]<b[i]≤25,1≤c[i]≤20,0≤p[i] ≤100000。

    时间有保障!!!
    在这里插入图片描述
    很容易想到设f[i][j]表示到了第i个点和为j(c数组)的最大值。
    然后一波DP。。。
    每次暴力枚举e[i],然后进行更新即可,时间的话。。。
    我们可以发现之中,a[i],b[i]的值很小,由于最后还要归回0,所以我们不难发现,j的最大值和最小值是可以知道的!!!n/2时,max=1002520=50000,min=100*-25=-50000。
    第i位的最大最小值为:if(i<n/2) mx[i]=2520i,mi[i]=-2520i;
    else mx[i]=2520(n-i),mi[i]=-2520(n-i);
    总而言之,可以过的。

    咳咳,差点忘了贴标了。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int n,a[201],b[201],c[201],d[201],f[201][7010];
    
    inline int read()
    {
    	int x=0,f=0; char c=getchar();
    	while (c<'0' || c>'9') f=(c=='-') ? 1:f,c=getchar();
    	while (c>='0' && c<='9') x=x*10+c-48,c=getchar();
    	return f ? -x:x;
    }
    
    int main()
    {
    	n=read();
    	memset(f,128,sizeof(f));
    	for (int i=1;i<=n;i++)
    		a[i]=read(),b[i]=read(),c[i]=read(),d[i]=read();
    	f[0][3500]=0;
    	for (int i=1;i<=n;i++)
    		for (int j=a[i];j<=b[i];j++)
    			for (int k=0;k<=7000;k++)
    				if (k+j*c[i]>=0 && k+j*c[i]<=7000) f[i][k]=max(f[i][k],f[i-1][k+j*c[i]]+j*d[i]);
    	printf("%d
    ",f[n][3500]);
    	return 0;
    }
    

    In general,时间分配得一点都不合理。
    第一题打完后打对拍又花了半个小时,
    再之后就想第二题,第二题预处理打了记忆化dfs(竟然没有想到bfs!!!)结果样例时超了!!!
    没办法,开始不断地想,想啊想,想啊想,想到最后™11:30分了!!!
    好啦,爆蛋啦,只好草草地打了个暴力。。。
    时间啊!!!!这™时间分配是多么重要啊!!!
    下次一定一定要好好注意!!!!!!!!!!!

    转载需注明出处。
  • 相关阅读:
    三角形的个数
    Nightmare(搜索)
    Prime Ring Problem(搜索)
    Safecracker(搜索)
    丑数
    八皇后问题(回溯法)
    Dijkstra
    floyd详解
    继续畅通工程(kruskal prim)
    畅通工程
  • 原文地址:https://www.cnblogs.com/jz929/p/11817856.html
Copyright © 2011-2022 走看看