ÎÊÌâÃèÊö ¡¡¡¡ÓÐÒ»¸öÏä×ÓÈÝÁ¿ÎªV£¨ÕýÕûÊý£¬0£¼£½V£¼£½20000£©£¬Í¬Ê±ÓÐn¸öÎïÆ·£¨0£¼n£¼£½30£©£¬Ã¿¸öÎïÆ·ÓÐÒ»¸öÌå»ý£¨ÕýÕûÊý£©£¬
×°ÏäÎÊÌ⶯̬¹æ»®
¡£ÒªÇón¸öÎïÆ·ÖУ¬ÈÎÈ¡Èô¸É¸ö×°ÈëÏäÄÚ£¬Ê¹Ïä×ÓµÄÊ£Óà¿Õ¼äΪ×îС¡£ ÊäÈë¸ñʽ ¡¡¡¡µÚÒ»ÐÐΪһ¸öÕûÊý£¬±íʾÏä×ÓÈÝÁ¿£»
µÚ¶þÐÐΪһ¸öÕûÊý£¬±íʾÓÐn¸öÎïÆ·£»
½ÓÏÂÀ´nÐУ¬Ã¿ÐÐÒ»¸öÕûÊý±íʾÕân¸öÎïÆ·µÄ¸÷×ÔÌå»ý¡£ Êä³ö¸ñʽ ¡¡¡¡Ò»¸öÕûÊý£¬±íʾÏä×ÓÊ£Óà¿Õ¼ä¡£ ÑùÀýÊäÈë 24
6
8
3
12
7
9
7 ÑùÀýÊä³ö 0 ÕâÌâ¶ÁÍêÖ®ºó¶à˼¿¼Ë¼¿¼£¬ Æäʵ¾ÍÄÜ·¢ÏÖ¾ÍÊÇ0-1±³°üÎÊÌâ ÿ¸öÎïÆ·µÄÌå»ý¾ÍÊÇ»¨·ÑͬʱҲÊǼÛÖµ£¬ Ò²¾ÍÊÇ˵ÕâÌâ¿ÉÒÔת»¯ÎªÔÚ×ÜÌå»ýΪwÏ£¬¿ÉÒԵõ½×î´óµÄ¼ÛÖµ ×îºóÓÃ×ÜÌå»ý¼õÈ¥×î´óµÄ¼ÛÖµ¾ÍÊÇÊ£ÏÂ×îÉٵĿռä ×´Ì¬×ªÒÆ·½³Ìd[j] = max(d[j], d[j - a[i]] + a[i]);
#include<stdio.h>#include<string.h>#include using namespace std;int n;int d[20005];int a[35];int main(){ int w; scanf("%d%d", &w, &n); int i, j; for (i = 0; i < n; i++){ scanf("%d", &a[i]); } memset(d, 0, sizeof(d)); for (i = 0; i < n; i++){ for (j = w; j >= a[i]; j--) d[j] = max(d[j], d[j - a[i]] + a[i]); } printf("%d\n", w - d[w]); return 0;}</string.h></stdio.h>