hdu 1864 DP
来源:互联网 发布:手绘照片软件叫什么 编辑:程序博客网 时间:2024/05/23 23:36
这题真是把我恶心到了,不过有个地方要注意的是,不能在flag为1后就跳出该次循环,因为还要把剩余的给输入,蛋疼啊!!!!
AC代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>using namespace std;int dp[5000000];int DP( int num[], int N, int sum ){memset( dp, 0, sizeof( dp ) );for( int i = 0; i < N; i++ ){for( int j = sum; j >= num[i]; j-- ){dp[j] = max( dp[j], dp[j-num[i]] + num[i] ); }}return dp[sum];}int main(){int num[31];double sum;int N;int count;while( scanf( "%lf%d", &sum, &N ) ){if( N == 0 ){break;}int m;int ta, tb, tc;int flag = 0;char c;count = 0;for( int i = 0; i < N; i++ ){scanf( "%d",&m );ta = tb = tc = 0;flag = 0;while( m-- ){double temp;scanf( "%*c%c:%lf", &c, &temp );temp *= 100;int x = (int)temp;if( flag == 0 ){//不能在falg==1后就立马结束该次循环,因为还要把之后的数据给输入!!!!!!if( c == 'A' || c == 'B' || c == 'C' ){if( c == 'A' ){ta += x;if( ta > 60000 ){flag = 1;}}else if( c == 'B' ){tb += x;if( tb > 60000 ){flag = 1;}}else{tc += x;if( tc > 60000 ){flag = 1;}}}else{flag = 1;}}} if( !flag && ta + tb + tc <= 100000 ){num[count++] = ta + tb + tc;}}int ans = DP( num, count, (int)( sum * 100 ) );printf( "%.2lf\n", ( (double)ans ) / 100.0 );}return 0;}
- hdu 1864 DP
- HDU 1864 dp
- hdu 1864 dp 01背包
- 排位赛dp总结(HDU 2955,HDU 1864,HDU 1421)
- HDU DP
- DP? HDU
- DP? HDU
- DP? HDU
- 【dp】HDU
- 【dp】HDU
- 【dp】 HDU
- DP? HDU
- hdu 1864 最大报销额 【DP】
- hdu 1864 最大报销额 (DP)
- hdu 1864 最大报销额(dp)
- hdu 1864 最大报销额 DP
- hdu 1864 最大报销额 dp
- [HDU 1864 最大报销额] 入门DP
- 判断两个单向链表是否相交
- UVa10249 - The Grand Dinner(为什么超时)
- STM32通用定时器TIM2、3、4
- c++ regex第三方库 当然现在c++11也支持regex
- "crontab" 间隔固定时间执行
- hdu 1864 DP
- window.opener.location.reload() 弹出窗口关闭时用来刷新父窗 口
- 自己动手写操作系统--搭建保护模式下的运行环境:bochs下安装freedos
- Linux tar打包命令
- Valid signing identity not found解决办法(原有IDP私钥丢失)
- shell环境变量以及set,env,export的区别
- 临界区(Critical section)与互斥体(Mutex)的区别
- 城市公交查询--Api接口
- ViewGroup为什么不会调用onDraw