1 条题解
-
0
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n,m; char col[11][11]; int cnt[11],cost[11][111]; int sum[11],dp[50000]; int getid(char s[]) { int i; for(i=0; i<m; i++) if(strcmp(col[i],s)==0) return i; } int main() { int i,j,k,tcost,id; char str[11]; while(cin>>m>>n) { if(n==0&&m==0) break; memset(sum,0,sizeof(sum)); memset(cnt,0,sizeof(cnt)); for(i=0; i<m; i++) cin>>col[i]; for(i=0; i<n; i++) { cin>>tcost>>str; id=getid(str); cost[id][cnt[id]++]=tcost; sum[id]+=tcost; } int ans=0; for(i=0; i<m; i++) { memset(dp,0,sizeof(dp)); int mid=sum[i]/2; for(j=0; j<cnt[i]; j++) for(k=mid; k>=cost[i][j]; k--) dp[k]=max(dp[k],dp[k-cost[i][j]]+cost[i][j]); ans+=(sum[i]-dp[mid]); } cout<<ans<<endl; } return 0; }
- 1
信息
- ID
- 2212
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 1
- 上传者