洛谷P1757 通天之分组背包

    科技2022-07-16  136

    题目链接:点击进入

    思路

    分组背包,套板子

    代码

    #include<iostream> #include<string> #include<map> //#include<unordered_map> #include<queue> #include<cstdio> #include<vector> #include<cstring> #include<algorithm> #include<iomanip> #include<cmath> #include<fstream> #define X first #define Y second #define best 131 #define INF 0x3f3f3f3f #define P pair<int,int> using namespace std; typedef long long ll; typedef unsigned long long ull; const double eps=1e-5; const double pai=acos(-1.0); const int N=1e3+10; const int maxn=110; const int mod=1e9+7; //const int d[4][2]={0,1,1,0,-1,0,0,-1}; int n,m,k,t,w[N],v[N],c[N],g[N][N]; ll f[N]; int main() { // ios::sync_with_stdio(false); //memset(f,1e9,sizeof(f)); scanf("%d%d",&m,&n); for(int i=1;i<=n;i++) { scanf("%d%d%d",&w[i],&v[i],&k);//k表示第i个物品的小组编号 t=max(t,k);//求小组组数 c[k]++;//小组k的物品+1 g[k][c[k]]=i; //g[i][j]表示存储小组i中的第j个物品的编号 } for(int i=1;i<=t;i++) {//小组 for(int j=m;j>=0;j--) { //容量 for(int z=1;z<=c[i];z++) {//小组中的物品 if(j>=w[g[i][z]]) {//小组i中物品z的容量 f[j]=max(f[j],f[j-w[g[i][z]]]+v[g[i][z]]); } } } } printf("%lld\n",f[m]); return 0; }
    Processed: 0.014, SQL: 8