CodeForces
来源:互联网 发布:三毛梦里花落知多少txt 编辑:程序博客网 时间:2024/04/30 11:02
题目大意
输入
下面的n行表示给第
第二行0表示该树没有颜色,其余表示树已经有该颜色了不能添加颜色了
解题思路
如果当前没有被染色:
如果已经被染色了 :
AC代码
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;const int MX = 105;const LL INF = 0x3f3f3f3f3f3f3f;LL dp[MX][MX][MX];int A[MX],w[MX][MX];int main(){ int n,m,K;//freopen("in.txt","r",stdin); scanf("%d%d%d",&n,&m,&K); for(int i=1;i<=n;i++) scanf("%d",&A[i]); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&w[i][j]); memset(dp,INF,sizeof dp);dp[0][0][0] = 0; for(int i=1;i<=n;i++){ if(A[i]) { for(int j=1;j<=K;j++){ dp[i][A[i]][j] = min(dp[i][A[i]][j],dp[i-1][A[i]][j]); LL Min = INF; for(int p = 0;p<=m;p++) if(p!=A[i]) Min = min(Min,dp[i-1][p][j-1]); dp[i][A[i]][j] = min(Min,dp[i][A[i]][j]); }continue; } for(int k=1;k<=K;k++){ for(int j=1;j<=m;j++){ dp[i][j][k] = min(dp[i][j][k],dp[i-1][j][k] + w[i][j]); LL Min = INF; for(int p=0;p<=m;p++){ if(p!=j) Min = min(Min,dp[i-1][p][k-1]); } dp[i][j][k] = min(dp[i][j][k],Min+w[i][j]); } } } LL ans = INF; for(int i=1;i<=m;i++) ans = min(ans,dp[n][i][K]); printf("%lld\n",ans==INF?-1:ans); return 0;}
0 0
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Linux 守护进程Daemon
- ES6之Object--构造函数与类静态方法
- POJ
- 人生
- 49. Group Anagrams
- CodeForces
- c++ 类的简单设计(第二次作业)
- 重复提交
- 素数问题
- 透明代理、匿名代理、混淆代理、高匿代理有什么区别?
- C++获取系统时间和格林制(GMT)时间函数,并按一定格式输出
- 华为机试-从单链表中删除指定值的节点
- Android—android studio 安装完成之后导入项目的乱码问题
- java定时器Timer的应用