• 20180610模拟赛T3——书本整理


    【问题描述】

    小明的书架上放了许多书,为了使书架变得整洁,小明决定整理书架,他将所有书按高度大小排列,这样排了之后虽然整齐了许多,但小明发现,书本的宽度不同,导致书架看上去还是有些凌乱。小明把这个凌乱值定义为相邻两本书的宽度差的绝对值的和。

    例如有4本书:

    1×2
    5×3
    2×4
    3×1

    那么小明将其排列整齐后的顺序是:

    1×2
    2×4
    3×1
    5×3

    凌乱值就是2+3+2=7

    于是小明决定拿掉其中的k本书,使凌乱值最小,你能帮他求出这个最小值吗?已知每本书的高度都不一样。

    【问题输入】

    第一行两个数字n和k,代表书总共有n本,要求从中去掉k本。((lle n le 100, 1le k le n))。下面的n行,每行两个数字表示一本书的高度和宽度,它们均小于200。

    【问题输出】

    一行一个整数,表示书架的最小凌乱值。

    【样例输入】

    4 1
    1 2
    2 4
    3 1
    5 3

    【样例输出】

    3

    【数据范围】

    30%的数据,n≤20。

    100%的数据,n≤l00,k<n。

    题解

    JYT:这是一道简单的动态规划题……

    记录去掉(k)本比较麻烦,那就记录留下(n-k)本吧……

    (dp[i][j])表示到第(i)本且必须保留(i),保留了(j)本的方案数。

    容易得到转移方程:

    (dp[i][kk+1] = min(dp[i][kk+1], dp[j][kk] + abs(book[i].kuan - book[j].kuan)))

    book[i].kuan表示第(i)本书的宽度。

    代码如下:

    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <algorithm>
    
    using namespace std;
    
    #define fill(a) memset(a, 0x3f, sizeof(a))
    
    const int maxn = 105;
    
    int dp[maxn][maxn];
    
    struct BOOK
    {
    	int quan, h, kuan;
    
    	inline bool operator < (const BOOK& other) const
    	{
    		return h < other.h;
    	}
    } book[maxn];
    
    const int inf = 0x3f3f3f3f;
    
    int main()
    {
    	freopen("book.in", "r", stdin);
    	freopen("book.out", "w", stdout);
    	int n, k;
    	scanf("%d%d", &n, &k);
    	for(int i = 1; i <= n; ++i)
    		scanf("%d%d", &book[i].h, &book[i].kuan);
    	k = n-k;
    	sort(book+1, book+1+n);
    	fill(dp);
    	for(int i = 1; i <= n; ++i)
    		dp[i][1] = 0;
    	for(int i = 2; i <= n; ++i)
    		for(int j = 1; j < i; ++j)
    			for(int kk = 1; kk < k; ++kk)
    				dp[i][kk+1] = min(dp[i][kk+1], dp[j][kk] + abs(book[i].kuan - book[j].kuan));
    	int ans = inf;
    	for(int i = 1; i <= n; ++i)
    		ans = min(ans, dp[i][k]);
    	printf("%d", ans);
    	return 0;
    }
    
  • 相关阅读:
    614
    python argparse使用
    CSS – Monospaced font & ch unit 等宽字体与 ch 单位
    CSS – Font / Text 属性
    CSS – Font Family
    DOM – Web Animation API
    CSS & JS Effect – Statistics Counter
    第 80 场双周赛(python版)
    20192408 胡益琳 202120222 《网络与系统攻防技术》实验八实验报告
    爱普生机器人和汇川AM401的ModbusTCP通讯
  • 原文地址:https://www.cnblogs.com/pfypfy/p/9164005.html
Copyright © 2020-2023  润新知