现在的位置: 首页 > 综合 > 正文

HDU ACboy needs your help 隐藏的分组背包水题

2013年04月16日 ⁄ 综合 ⁄ 共 659字 ⁄ 字号 评论关闭

前几天对这题编了码。自己本地都跑不过。罢了,谁叫我不会做呢= =。
今天被树形DP虐了,没想法了= =。回头准备切切这题。分析了一下特点:

总共要学习N天,每门课程学习的天数都有不同的价值。在每门课程中只能选择一个指定的天数来学。

Wait!!! 怎么感觉好像分组背包的描述!
背包容量为要学习的N天,每门课程为一个分组,分组中每个物品的代价是学分,花费是学习的天数。
而分组背包为:在每个分组中至多选择一个,求最大值。LeeeeeNiang!这不是分组背包么!!!
敲之交之,AC.带感!
学习DP有5天了啊。收获还是不错的,虽然不管什么题,每天固定3道,突破不了也少不了= =。26/3=8天,还要切三天啊... 悲催.....

#include<iostream>
#include<string>
#include<string>
using namespace std;

int main()
{
 	int N,M;
 	int A[111][111];
 	int f[111];
 	while( scanf( "%d %d",&N,&M ),N||M )
 	{
	 	   memset( f,0,sizeof(f) );
	 	   for( int i=1;i<=N;i++ )
	 	   for( int j=1;j<=M;j++ )
	 	   		scanf( "%d",&A[i][j] );
	 	   
	 	   for( int i=1;i<=N;i++ )
	 	   for( int v=M;v>=1;v-- )
	 	   for( int j=1;j<=M;j++ )
	 	   		if( v-j>=0 )
	 	   			f[v]=max( f[v],f[v-j]+A[i][j] );
	 	   
	 	   printf( "%d\n",f[M] );
  	}
 	return 0;
}

抱歉!评论已关闭.