• 洛谷 P5322 [BJOI2019]排兵布阵(dp,分组背包)


    传送门


    解题思路

    首先很显然的贪心是 在每个地方放置的士兵一定是某个敌人放置士兵的两倍加一。
    这样每个地方就有s种放置方法,每种对应一个数量和一个权值,于是就成了很典型的分组背包。

    AC代码

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<cstdlib>
    #include<vector>
    #include<map>
    #include<queue>
    #include<cmath>
    #include<stack>
    #include<set>
    #include<bitset>
    #include<cstdio>
    #include<ctime>
    using namespace std;
    inline int read()
    {
    	int f=0;
    	char cc=getchar();
    	while(cc<'0'||cc>'9')cc=getchar();
    	while(cc>='0'&&cc<='9')f=f*10+cc-'0',cc=getchar();
    	return f;
    }
    int s,n,m,dp[20005],a[105][105],ans;
    int main(){
    	s=read();
    	n=read();
    	m=read();
    	for(int i=1;i<=s;i++){
    		for(int j=1;j<=n;j++){
    			a[j][i]=read();
    		}
    	}
    	for(int i=1;i<=n;i++) sort(a[i]+1,a[i]+s+1);
    	for(int i=1;i<=n;i++){
    		for(int j=m;j>=0;j--){
    			for(int k=1;k<=s;k++){
    				if(j>=a[i][k]*2+1) dp[j]=max(dp[j],dp[j-a[i][k]*2-1]+k*i);
    			}
    			ans=max(ans,dp[j]);
    		}
    	}
    	cout<<ans;
    	return 0;
    }
    
  • 相关阅读:
    Graphics竖排打印字体
    VC GetDlgItem
    C# FontStyle
    VC弹出"选择文件"和"选择文件夹"对话框(转)
    VC获取应用程序路径
    SqlServer延时函数
    volatile修饰变量
    外部命令和内部命令
    curl命令简单使用
    close_socket断开连接的方式
  • 原文地址:https://www.cnblogs.com/yinyuqin/p/15061146.html
Copyright © 2020-2023  润新知