uva11400照明系统设计与uva11584划分成回文串
2018-02-03 15:57
337 查看
http://blog.csdn.net/maxichu/article/details/44757599
http://blog.csdn.net/shuangde800/article/details/9669175
uva11400
题目大意:有一个照明系统需要用到n种灯,每种灯的电压为V,电源费用K,每个灯泡费用为C,需要该灯的数量为L。注意到,电压相同的灯泡只需要共享一个对应的电源即可,还有电压低的灯泡可以被电压高的灯泡替代。为了节约成本,你将设计一种系统,使之最便宜。
分析:首先需要明确一种灯泡要么全部换,要么不换。如果换一部分的话,首先电源费用得不到节约,那么节约的部分就只来自于换的那部分灯泡,既然可以节约钱干嘛不干脆全部换了呢?所以要么全换,要么不换。然后我们的算法就是先按照V排序,然后cost[i]表示解决前 i 种灯泡的最优解,那么转移方程是枚举j
uva11584
题目大意:
给一个字符串, 要求把它分割成若干个子串,使得每个子串都是回文串。问最少可以分割成多少个。
分析:
f[i]表示以i结尾的串最少可以分割的串数。
f[i] = min{ f[j]+1, 串[j,i]是回文串&&1<=j<=i }
代码:
http://blog.csdn.net/shuangde800/article/details/9669175
uva11400
题目大意:有一个照明系统需要用到n种灯,每种灯的电压为V,电源费用K,每个灯泡费用为C,需要该灯的数量为L。注意到,电压相同的灯泡只需要共享一个对应的电源即可,还有电压低的灯泡可以被电压高的灯泡替代。为了节约成本,你将设计一种系统,使之最便宜。
分析:首先需要明确一种灯泡要么全部换,要么不换。如果换一部分的话,首先电源费用得不到节约,那么节约的部分就只来自于换的那部分灯泡,既然可以节约钱干嘛不干脆全部换了呢?所以要么全换,要么不换。然后我们的算法就是先按照V排序,然后cost[i]表示解决前 i 种灯泡的最优解,那么转移方程是枚举j
#include<iostream> #include<algorithm> using namespace std; #define MAX 100000 struct node { int v, k, l, c; bool operator<(const node &a) { return v < a.v; } }arr[MAX]; int main(void) { int n; while (cin >> n) { for (int i = 1; i <= n; i++) cin >> arr[i].v >> arr[i].k >> arr[i].c >> arr[i].l; sort(arr + 1, arr + n + 1); int num[MAX], cost[MAX]; for (int i = 1; i <= n; i++) num[i] = num[i - 1]+arr[i].l; cost[0] = 0; for (int i = 1; i <= n; i++) { cost[i] = MAX; for (int j = 0; j <= i; j++) { cost[i] = min(cost[i], cost[j] + (num[i] - num[j])*arr[i].c + arr[i].k); } } cout << cost << endl;; } return 0; }
uva11584
题目大意:
给一个字符串, 要求把它分割成若干个子串,使得每个子串都是回文串。问最少可以分割成多少个。
分析:
f[i]表示以i结尾的串最少可以分割的串数。
f[i] = min{ f[j]+1, 串[j,i]是回文串&&1<=j<=i }
代码:
#include<iostream> #include<algorithm> #include<iostream> using namespace std; typedef long long int64; const int INF = 0x3f3f3f3f; const int MAXN = 1010; char str[MAXN]; int f[MAXN]; bool isPalind(int l, int r) { while (l<r) { if (str[l] != str[r]) return false; ++l; --r; } return true; } int main() { int T; cin>>T; while (T--) { cin>>str + 1; int len = strlen(str + 1); cout << len << endl; 9b17 memset(f, 0, sizeof(f)); for (int i = 1; i <= len; ++i) { f[i] = i + 1; for (int j = 1; j <= i; ++j)if (isPalind(j, i)) { f[i] = min(f[i], f[j - 1] + 1); } } printf("%d\n", f[len]); } return 0; }
相关文章推荐
- UVa 11400 照明系统设计
- UVA 11400 Lighting System Design 照明系统设计(DP)
- UVa 11400 Lighting System Design(DP 照明系统设计)
- UVA11400照明系统设计
- UVA11400照明系统设计&& POJ1260Peals(DP)
- [UVa11400]照明系统设计
- 照明系统设计(uva 11400)
- uva11400 照明系统设计
- UVA 11400 Lighting System Design 照明系统设计
- Uva 11400,照明系统设计
- 动态规划(照明系统设计,uva 11400)
- 划分成回文串(uva 11584)
- UVA11400灯泡照明系统(DP)
- UVa 11584 划分成回文串
- UVA 11584 Partitioning by Palindromes 划分成回文串(DP + 预处理)
- uva 11584 划分成回文串
- uva 划分成回文串 11584 题解
- UVA 11584 或 BNU20002 划分成回文串 DP求一个串最少能划分成多少个文回串
- uva11584 划分成回文串
- Uva 11400 照明系统