완전 가방【DP】

4078 단어 DP
> Description에는 n가지 아이템이 설치되어 있으며, 각 아이템은 무게와 가치가 있다.그러나 모든 물품의 수량은 무한하고 가방이 하나 있으며 최대 적재량은 M이다. 현재 n종의 물품 중에서 몇 개(같은 물품은 여러 번 선택할 수 있다)를 선택하여 무게의 합이 M보다 작고 가치의 합이 가장 크다.
> Input 첫 줄: 두 개의 정수, M(가방 용량, M<=200)과 N(아이템 수량, N<=30);두 번째...N+1줄: 줄마다 두 개의 정수 Wi,Ui로 각 물품의 무게와 가치를 나타낸다.
> Output은 최대 총 가치를 나타내는 행에 한 개만 표시됩니다.
> Sample Input 12 4 2 1 3 3 4 5 7 9
> Sample Output 15
> 문제풀이 아이디어 이 문제는 완전히 가방이 01가방으로 변할 수 있다.판단의'선택'을 같은 줄로 만들면 된다. 같은 종류의 물건을 많이 선택할 수 있기 때문이다.그래서 이렇게 간단한데 내가 주석을 한 번 해 볼게. 자꾸 주석을 하지 않아서 좀 당황스러워.근데 진짜 할 말이 없어요!
> 코드
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int n,m,w,p,f[205];
int main()
{
	scanf("%d%d",&m,&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&w,&p);
		for(int j=w;j<=m;j++)
		 f[j]=max(f[j],f[j-w]+p);
		//  
	}
	printf("%d",f[m]);
	return 0;
}

좋은 웹페이지 즐겨찾기