您的位置:首页 > 其它

|洛谷|动态规划|P1757 通天之分组背包

2016-11-13 15:40 267 查看
https://www.luogu.org/discuss/show?postid=2772

简单分组背包

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define ms(i,j) memset(i,j, sizeof i);
/* NOIP2016倒计时,RP++
Luogu: P1757 通天之分组背包
*/
using namespace std;
int n,m;
int a[105][1005];//组
int w[1005], v[1005];
int f[1005];
int main()
{
scanf("%d%d", &m ,&n);
ms(a,0);
int mm = 0;
for (int i=1;i<=n;i++)
{
int ci;
scanf("%d%d%d", &w[i], &v[i], &ci);
a[ci][++a[ci][0]] = i;
mm = max(mm, ci);
}
ms(f,0);
for (int i=1;i<=mm;i++)
{
for (int j=m;j>=0;j--)
{
for (int k=1;k<=a[i][0];k++)
{
if (j>=w[a[i][k]])
{
f[j] = max(f[j], f[j-w[a[i][k]]]+v[a[i][k]]);
}
}
}
}
printf("%d\n", f[m]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: