NOIP2006普及組 開心的金明
【问题描述】
金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎 么布置,你说了算,只要不超过 N 元钱就行”。今天一早金明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的 N 元。于是,他把每件物品规定了一个重要度,分为 5 等:用整数 1 ~ 5 表示,第 5 等最重要。他还从因特网上查到了每件物品的价格(都是整数元)。他希望在不超过 N 元(可以等于 N 元)的前提下,使每件物品的价格与重要度的乘积的总和最大。
设第 j 件物品的价格为 v[j] ,重要度为 w[j] ,共选中了 k 件物品,编号依次为 j1 , j2 ,……, jk ,则所求的总和为:
v[j1]*w[j1]+v[j2]*w[j2]+ … +v[jk]*w[jk] 。(其中 * 为乘号)
请你帮助金明设计一个满足要求的购物单。
【输入格式】
输入文件 happy.in 的第 1 行,为两个正整数,用一个空格隔开:
N m
(其中 N ( < 30000 )表示总钱数, m ( <25 )为希望购买物品的个数。)
从第 2 行到第 m+1 行,第 j 行给出了编号为 j-1 的物品的基本数据,每行有 2 个非负整数
v p
(其中 v 表示该物品的价格 (v<=10000) , p 表示该物品的重要度 (1~5) )
【输出格式】
输出文件 happy.out 只有一个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的最大值( <100000000 )。
【输入输出样例】
输入:
1000 5
800 2
400 5
300 5
400 3
200 2
输出:
3900
#include <iostream> #include <cstdio> using namespace std; int TolM;//總錢數 int TolThing;//總物品 int F[26][100001]; class THING { public: int v;//價格 int p;//重要度 }T[25]; int getval(int i) { return (T[i].v*T[i].p); } void init() { cin>>TolM>>TolThing; for (int i=1;i<=TolThing;i++) { cin>>T[i].v>>T[i].p; } fclose(stdin); return; } void predp() { int i,j; for (i=1;i<=TolThing;i++) for (j=1;j<=TolM;j++) F[i][j]=0; int q=getval(1); for (i=T[1].v;i<=TolM;i++) { F[1][i]=q; } return; } void print() { int i,j; for (i=1;i<=TolThing;i++) { for (j=1;j<=TolM;j++) cout<<F[i][j]<<" "; cout<<endl; } cout<<endl; } void dp() { int i,j; for (i=2;i<=TolThing;i++) { for (j=1;j<=TolM;j++) { if (T[i].v>j) F[i][j]=F[i-1][j]; else F[i][j]= ((F[i-1][j])>(F[i-1][j-T[i].v]+getval(i))? (F[i-1][j]):(F[i-1][j-T[i].v]+getval(i))); } } } int main() { freopen("happy.in","r",stdin); freopen("happy.out","w",stdout); init(); predp(); dp(); //print(); cout<<F[TolThing][TolM]<<endl; return 0; }
正在连接评测机...
已连接到评测机
GRID | 1 |
名称 | Flitty |
系统版本 | 1.00 |
备注 | COGS 1号评测机 Flitty |
正在编译...
编译成功
测试点 | 结果 | 得分 | 运行时间 | 内存使用 | 退出代码 |
1 | 正确 | 10 | 0.062 s | 10428 KB | 0 |
2 | 正确 | 10 | 0.001 s | 10428 KB | 0 |
3 | 正确 | 10 | 0.001 s | 10428 KB | 0 |
4 | 正确 | 10 | 0.001 s | 10428 KB | 0 |
5 | 正确 | 10 | 0.004 s | 10428 KB | 0 |
6 | 正确 | 10 | 0.003 s | 10428 KB | 0 |
7 | 正确 | 10 | 0.004 s | 10428 KB | 0 |
8 | 正确 | 10 | 0.005 s | 10428 KB | 0 |
9 | 正确 | 10 | 0.007 s | 10428 KB | 0 |
10 | 正确 | 10 | 0.001 s | 10428 KB | 0 |
运行完成
运行时间 0.089 s
平均内存使用 10428 KB
测试点通过状况 AAAAAAAAAA
得分:100
恭喜你通过了全部测试点!