当前位置: 代码迷 >> 综合 >> HDU ACboy needs your help 隐藏的分组背包水题
  详细解决方案

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

热度:58   发布时间:2024-01-20 20:36:53.0

前几天对这题编了码。自己本地都跑不过。罢了,谁叫我不会做呢= =。
今天被树形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;
}